タイトル長くない?
class C(): def __init__(self): self.x = 10 @property def x(self): return self.__dict__["x"] @x.setter def x(self, value): print("eh-eh") self.__dict__["x"] = value
データディスクリプタはインスタンス属性辞書よりもアクセスが優先されるので、上のように書いてもC().x
はC().__dict__["x"]
ではなく、type(obj).__dict__["x"].__get__(obj, type(obj))
に繋がる表現になってくれる。
(単純なフックとして使われてる(?))プロパティ内で用いる属性変数は大抵アンダースコア1つ付けたものにするけど、それだと直接その変数に(比較的簡便に)アクセスできちゃうし、こっちのほうがより隠されてる感はある(単純な属性アクセスではディスクリプタが優先され、無理やりアクセスしようとする場合には__dict__
直接覗かないといけないという意味で)