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à
1, có thể được sử dụng để truy cập các thuộc tính của lớp>>> Student.tostring[] Student Class Attributes: name=unknown
- 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
9 và cũng có thể sử dụng đối tượng>>> Student.tostring[] Student Class Attributes: name=unknown
- 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épclass 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
1Bâ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
>>> 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
1Phươ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
>>> Student.tostring[]
Student Class Attributes: name=unknown
2Ví dụ. Phương thức lớp truy cập
Sao chép>>> Student.tostring[]
Student Class Attributes: name=unknown
3Phươ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
4Sau đâ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