클래스 데코레이터와 메소드 데코레이터를 멋지게 함께 플레이 할 때이 동작에 부딪 혔습니다. 본질적으로, 메소드 데코레이터는 일부 더미 값으로 메소드의 일부를 특별하게 플래그 지정하고, 클래스 데코레이터는 이후에 와서 값을 나중에 채 웁니다. 이것은 간단한 예를하다Python에서 instancemethods에 속성 추가하기
>>> 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
cow.moo.thing = 5
이 작동하지 않는 이유
사람이 cow.moo.thing
은 아주 명확하게 (10)는 나에게 준다해도, 알고 있나요? 그리고 왜 cow.moo.__func__.thing = 5
이 효과가 있습니까? 왜 그런지 전혀 모르지만 갑자기 무언가를 얻으려고 시도한 dir(cow.moo)
목록의 내용을 무작위로 들으며 무언가를 알 수 없습니다.
아, 나도 몰랐다. 감사! –
파이썬 3에서 오래된 게시물을 되살려 주어 죄송합니다.'cow(). moo.thing = 5'는'AttributeError : 'method'객체에 'thing'속성이 없습니다. 왜 그런지 알아? –
@JacquesGaudin 인스턴스 ('cow(). moo')에서 함수는 모든 버전의 Python에서 메서드 객체로 래핑됩니다. 차이점은 클래스 ('cow.moo')에서 파이썬 3으로 래핑되지 않았습니다. 랩핑은'self'가 함수에 자동으로 전달되도록하는데 필요합니다. – agf