Tôi gặp phải hành vi này khi cố gắng để có được trang trí lớp và trang trí phương pháp để chơi độc đáo với nhau. Về cơ bản, các trình trang trí phương thức sẽ gắn cờ một số phương thức đặc biệt với một số giá trị giả, và trình trang trí lớp sẽ đến sau và điền vào giá trị sau này. Đây là một ví dụ đơn giảnThêm thuộc tính vào instancemethods bằng Python
>>> class cow:
>>> def moo(self):
>>> print 'mooo'
>>> moo.thing = 10
>>>
>>> cow.moo.thing
10
>>> cow().moo.thing
10
>>> cow.moo.thing = 5
AttributeError: 'instancemethod' object has no attribute 'thing'
>>> cow().moo.thing = 5
AttributeError: 'instancemethod' object has no attribute 'thing'
>>> cow.moo.__func__.thing = 5
>>> cow.moo.thing
5
Có ai biết tại sao cow.moo.thing = 5
không làm việc, mặc dù cow.moo.thing
khá rõ ràng mang lại cho tôi 10? Và tại sao cow.moo.__func__.thing = 5
hoạt động? Tôi không có ý tưởng tại sao nó, nhưng trong ngẫu nhiên fiddling với các công cụ trong danh sách dir(cow.moo)
cố gắng để có được một cái gì đó để làm việc nó đột nhiên đã làm, và tôi không có ý tưởng tại sao.
Ah ok, tôi không bao giờ biết. Cảm ơn! –
Xin lỗi vì đã hồi sinh một bài đăng cũ nhưng trong Python3 'bò(). Moo.thing = 5' đang trả về đối tượng' AttributeError: 'method' không có thuộc tính 'thing''. Bạn có biết tại sao ? –
@JacquesGaudin Trên cá thể ('bò(). Moo') hàm được bao bọc trong một đối tượng phương thức trong bất kỳ phiên bản Python nào - sự khác biệt là trên lớp (' cow.moo') nó không được gói trong Python 3. Các gói là cần thiết cho 'tự' để có được thông qua tự động đến chức năng. – agf