この単純なクラスは、基本的な python オブジェクトの属性アクセスを模倣しようとします。dict
属性とクラスをcls
明示的に格納します。その結果.x
、インスタンスにアクセスすると が返されるdict[x]
か、失敗した場合は が返されますcls.x
。通常のオブジェクトと同じように。
class Instance(object):
__slots__ = ["dict", "cls"]
def __getattribute__(self, key):
try:
return self.dict[key]
except KeyError:
return getattr(self.cls, key)
def __setattr__(self, key, value):
if key == "__class__":
self.cls = value
else:
self.dict[key] = value
しかし、それはそれほど単純ではありません。明らかな問題の 1 つは、記述子が完全に無視されていることです。cls
プロパティがあると想像してみてください。で定義Instance.some_property = 10
されているようにプロパティにアクセスする必要がありますが、cls
代わりにsome_property
で属性として喜んで設定されますdict
。
cls
次に、 のメソッドを のインスタンスにバインドするという問題がありInstance
、おそらくそれ以上の問題があります。
上記のクラスをできる限り Python オブジェクトに近づけて機能させるには、多くの詳細があるようです。これまで読んだ記述子のドキュメントでは、簡単に言えば、すべてを正しくする方法が明確にされていません。
私が求めているのは、Python の属性アクセスの完全な代替を実装するためのリファレンスです。つまり、上記のクラスですが、正しいです。