07/02/18 01:54:54
委譲(デリゲート)での__getattribute__の使い方が分りません。
従来の__getattr__() は、解決できない属性名の時だけ呼ばれるが
__getattribute__() は、属性値の取得が必要になったときに、常に呼ばれるらしいのですが。
まず、__getattr__でのサンプル。
class wrapper(object):
def __init__(self, obj):
self.__wrapped = obj # obj を組み込む。
def __getattr__(self, attrname): # attrnameは、知らない名前の属性が来たら呼び出される
return getattr(self.__wrapped, attrname) # 組み込まれたオブジェクトにgetattr 関数で処理を委託。
l = wrapper([]) # リストを引数にwrapper クラスを呼び出すと、リストにできる操作なら全てできる
(実行すると、正しく動作します)
>>> l.append(333)
>>> l.pop(0)
333