Tôi cần một số thuộc tính lớp được điền bởi lambda đó và tự tham chiếu lớp đó rõ ràng là không thể ở giai đoạn đó.
Nhưng từ mã cho bạn, tất cả LAMBDA sẽ làm gì khi nó được gọi là chính nó gọi MyClass.ClassMethod()
, có nghĩa là phương pháp làm populating là ClassMethod
(điều này là, tất nhiên, giả định rằng cơ thể của ClassMethod
không phải là thực sự duy nhất pass
mà bạn đã thể hiện, bởi vì nếu sau đó thực hiện tất cả điều này là một bài tập trong vô ích).Trừ khi có một số khía cạnh của mã của bạn ngăn cản bạn tham chiếu đến lớp trước khi sử dụng nó cho bất cứ điều gì, tại sao bạn không thể gọi MyClass.ClassMethod()
sau khi định nghĩa lớp học?
Và nếu bạn đang cố gắng sửa đổi thuộc tính của lớp bên trong định nghĩa (nghĩa là gọi LAMBDA trong định nghĩa của MyClass, bên ngoài bất kỳ phương thức/chức năng nào), bạn có thể muốn xem phần tài liệu về số metaclasses.
Trên một lưu ý phụ, nếu bạn muốn gán thuộc tính cho một lớp, bạn thậm chí không cần phải làm như vậy trong nội dung của lớp đó.
>>> class cls(object): # or just "class cls:"
... pass
...
>>> cls.value = 10
>>> cls.name = 'class'
>>> cls.value
10
>>> cls.name
'class'
>>> dir(cls)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'name', 'value']
FYI, Điều này hoạt động trên Python 3, nhưng không phải trên Python 2. – kennytm
@KennyTM, Nó hoạt động trên Python 3 bởi trùng hợp ngẫu nhiên. Python 3 đã loại bỏ phương thức bị ràng buộc và chỉ trả về chính hàm đó. Mặc dù đây là một quyết định thiết kế tốt, nó là khái niệm iffy lúc tốt nhất để sử dụng nó để làm cho staticmethods giả. –