クラス デコレータとメソッド デコレータをうまく連携させようとしたときに、この動作に遭遇しました。基本的に、メソッド デコレーターはいくつかのメソッドに特別なダミー値を付けてフラグを立て、クラス デコレーターは後で来て、後で値を入力します。これは簡単な例です
>>> 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
明らかに10が得られますが、なぜcow.moo.thing = 5
機能しないのか誰かが知っていますか? cow.moo.thing
そして、なぜcow.moo.__func__.thing = 5
機能するのですか?理由はわかりませんが、dir(cow.moo)
何かを機能させようとしてリスト内のものをランダムにいじっていると、突然機能し、理由がわかりません。