__getattr__
委任を意図的に使用するコードに出くわしました。
class ClassA(object):
def __init__(self):
self.a = 10
self.b = 20
def methodA(self):
return "method A"
class ClassB(object):
def __init__(self):
self.a = 30
self.b = 40
def methodB(self):
return "method B"
def __getattr__(self, arg):
return getattr(ClassA(), arg)
obj = ClassB()
obj.methodB()
obj.methodA()
try:
obj.something
except AttributeError:
print("Attribute not found.")
これ__getattr__
は最後に検索され、ClassA で見つからない場合はclassBに委譲されるため機能します。これは実装委任に基づく原則であり、適切なオブジェクトへの呼び出しを委任するための直接的な方法として、サブクラス化または型チェックを好むことがわかりました。一部の人々は、これは大丈夫であり、必須であると考えています。これに明らかな欠点を見つけた人はいますか、それとも委任にこの戦略を採用するのは良いことですか?