Phương thức lớp Python @property

Starting with Python3.9, `@classmethod` can be stacked on top of `@property`, but it seems that `@staticmethod` cannot.


>>> class C:
..     @classmethod
..     @property
..     def cm[cls]:
..         return cls.__name__

..     @staticmethod
..     @property
..     def magic_number[]:
..         return 42
.. 
>>> C.cm
'C'
>>> C.magic_number

>>> 


This feels like inconsistent behaviour, plus, having staticmethod properties can be useful for creating read-only class attributes, for eg:


class C:
    @staticmethod
    @property
    def FINE_STRUCTURE_CONSTANT[]:
        return 1 / 137


This would make it hard to accidentally modify the constant inside the class.

Trong Python, trình trang trí

>>> Student.tostring[]
Student Class Attributes: name=unknown
8 được sử dụng để khai báo một phương thức trong lớp dưới dạng một phương thức lớp có thể được gọi bằng cách sử dụng
>>> Student.tostring[]
Student Class Attributes: name=unknown
9. Phương thức lớp cũng có thể được gọi bằng cách sử dụng một đối tượng của lớp

>>> Student.tostring[]
Student Class Attributes: name=unknown
8 là một thay thế của hàm classmethod[]. Nên sử dụng trình trang trí
>>> Student.tostring[]
Student Class Attributes: name=unknown
8 thay vì chức năng vì nó chỉ là một đường cú pháp

@classmethod Đặc điểm

  • Khai báo một phương thức lớp
  • Tham số đầu tiên phải là
    >>> Student.tostring[]
    Student Class Attributes: name=unknown
    
    1, có thể được sử dụng để truy cập các thuộc tính của lớp
  • Phương thức lớp chỉ có thể truy cập các thuộc tính lớp chứ không thể truy cập các thuộc tính thể hiện
  • Phương thức lớp có thể được gọi bằng cách sử dụng
    >>> Student.tostring[]
    Student Class Attributes: name=unknown
    
    9 và cũng có thể sử dụng đối tượng
  • Nó có thể trả về một đối tượng của lớp

Ví dụ sau khai báo một phương thức lớp

Ví dụ. @classmethod

Sao chép

class Student:
    name = 'unknown' # class attribute
    def __init__[self]:
        self.age = 20  # instance attribute

    @classmethod
    def tostring[cls]:
        print['Student Class Attributes: name=',cls.name]

Ở trên, lớp

>>> Student.tostring[]
Student Class Attributes: name=unknown
3 chứa thuộc tính lớp
>>> Student.tostring[]
Student Class Attributes: name=unknown
4 và thuộc tính thể hiện
>>> Student.tostring[]
Student Class Attributes: name=unknown
5. Phương thức
>>> Student.tostring[]
Student Class Attributes: name=unknown
6 được trang trí bằng trình trang trí
>>> Student.tostring[]
Student Class Attributes: name=unknown
8 làm cho nó trở thành một phương thức lớp, có thể được gọi bằng cách sử dụng phương thức
>>> Student.tostring[]
Student Class Attributes: name=unknown
8. Lưu ý rằng tham số đầu tiên của bất kỳ phương thức lớp nào phải là
>>> Student.tostring[]
Student Class Attributes: name=unknown
1 có thể được sử dụng để truy cập các thuộc tính của lớp. Bạn có thể đặt bất kỳ tên nào cho tham số đầu tiên thay vì
>>> Student.tostring[]
Student Class Attributes: name=unknown
1

Bây giờ, bạn có thể sử dụng phương thức lớp, như hình bên dưới

Ví dụ. Phương thức lớp truy cập

Sao chép

>>> Student.tostring[]
Student Class Attributes: name=unknown

Tuy nhiên, phương thức tương tự cũng có thể được gọi bằng cách sử dụng một đối tượng

Ví dụ. Gọi phương thức lớp sử dụng đối tượng

Sao chép

>>> Student.tostring[]
Student Class Attributes: name=unknown
1

Phương thức lớp chỉ có thể truy cập các thuộc tính lớp chứ không thể truy cập các thuộc tính thể hiện. Nó sẽ phát sinh lỗi nếu cố gắng truy cập thuộc tính thể hiện trong phương thức lớp

Ví dụ. @classmethod

Sao chép

>>> Student.tostring[]
Student Class Attributes: name=unknown
2

Ví dụ. Phương thức lớp truy cập

Sao chép

>>> Student.tostring[]
Student Class Attributes: name=unknown
3

Phương thức lớp cũng có thể được sử dụng làm phương thức xuất xưởng để lấy một đối tượng của lớp, như minh họa bên dưới

Ví dụ. @classmethod

Sao chép

>>> Student.tostring[]
Student Class Attributes: name=unknown
4

Sau đây gọi phương thức lớp để lấy một đối tượng

Ví dụ. Phương thức lớp như Phương thức xuất xưởng

Sao chép

>>> Student.tostring[]
Student Class Attributes: name=unknown
5

@classmethod so với @staticmethod

Bảng sau liệt kê sự khác biệt giữa phương thức lớp và phương thức tĩnh

@classmethod@staticmethodKhai báo một phương thức lớp. Khai báo một phương thức tĩnh. Nó có thể truy cập các thuộc tính lớp, nhưng không thể truy cập các thuộc tính thể hiện. Nó không thể truy cập thuộc tính lớp hoặc thuộc tính thể hiện. Nó có thể được gọi bằng cách sử dụng

>>> Student.tostring[]
Student Class Attributes: name=unknown
9 hoặc
>>> Student.tostring[]
Student Class Attributes: name=unknown
12. Nó có thể được gọi bằng cách sử dụng
>>> Student.tostring[]
Student Class Attributes: name=unknown
9 hoặc
>>> Student.tostring[]
Student Class Attributes: name=unknown
12. Nó có thể được sử dụng để khai báo một phương thức xuất xưởng trả về các đối tượng của lớp. Nó không thể trả về một đối tượng của lớp

@property nghĩa là gì trong lớp Python?

@property là trình trang trí tích hợp sẵn cho hàm property[] trong Python . Nó được sử dụng để cung cấp chức năng "đặc biệt" cho một số phương thức nhất định để làm cho chúng hoạt động như getters, setters hoặc deleters khi chúng ta định nghĩa các thuộc tính trong một lớp.

Phương thức @property trong Python là gì?

Người trang trí @property . Cú pháp của hàm này là. property[fget=None, fset=None, fdel=None, doc=None] trong đó, fget là hàm lấy giá trị của thuộc tính. fset là chức năng để đặt giá trị của thuộc tính. a built-in function that creates and returns a property object. The syntax of this function is: property[fget=None, fset=None, fdel=None, doc=None] where, fget is function to get value of the attribute. fset is function to set value of the attribute.

Tại sao @property được sử dụng trong Python?

Thuộc tính của Python[] là cách Pythonic để tránh các phương thức getter và setter chính thức trong mã của bạn . Chức năng này cho phép bạn chuyển thuộc tính lớp thành thuộc tính hoặc thuộc tính được quản lý. Vì thuộc tính [] là một chức năng tích hợp, bạn có thể sử dụng nó mà không cần nhập bất kỳ thứ gì.

Sự khác biệt giữa các thuộc tính và phương thức trong Python là gì?

trả lời. Một thuộc tính là một thuộc tính được đặt tên của một đối tượng. Các thuộc tính xác định các đặc điểm của một đối tượng như Kích thước, Màu sắc, v.v. hoặc đôi khi là cách mà nó cư xử. Một phương thức là một hành động có thể được thực hiện trên các đối tượng

Chủ Đề