Trong khi tích hợp một ứng dụng Django mà tôi chưa sử dụng trước đây, tôi đã tìm thấy hai cách khác nhau được sử dụng để xác định các hàm trong các lớp. Tác giả dường như sử dụng cả hai rất có chủ ý. Cái đầu tiên là cái mà bản thân tôi sử dụng rất nhiều:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
Cái còn lại là cái mà tôi không sử dụng, chủ yếu là vì tôi không hiểu khi nào sử dụng nó và để làm gì:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
Trong tài liệu Python, trình classmethod
trang trí được giải thích bằng câu này:
Một phương thức lớp nhận lớp dưới dạng đối số ngầm đầu tiên, giống như một phương thức cá thể nhận cá thể.
Vì vậy, tôi đoán cls
đề cập đến Dummy
chính nó ( class
chứ không phải trường hợp). Tôi không hiểu chính xác tại sao điều này tồn tại, bởi vì tôi luôn có thể làm điều này:
type(self).do_something_with_the_class
Đây chỉ là vì mục đích rõ ràng, hay tôi đã bỏ lỡ phần quan trọng nhất: những điều ma quái và hấp dẫn không thể thực hiện được nếu không có nó?