昨夜、次のことに出くわしましたが、それを説明するのにまだ途方に暮れています。
class Foo(object):
@property
def dave(self):
vars(self)['dave'] = 1
return 2
f = Foo()
print f.dave
print f.dave
このコードを実行すると、以下が生成されます。
2
2
問題はなぜですか?属性アクセスに関する私の理解では、インスタンス ディクショナリはクラス ディクショナリの前にチェックされ、すべてのベースのディクショナリがチェックされますが、上記のように、クラス ディクショナリで記述子が見つかる前にインスタンス ディクショナリがチェックされているようには見えません。