我遇到了有意__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。我发现这是基于实现委托的原则,并且更喜欢将子类化或类型检查作为将调用委托给适当对象的直接方式。有些人认为这没问题,而且是必需的。有没有人发现这有什么明显的缺点,或者采用这种授权策略好不好?