gpt4 book ai didi

python - 使用 __getattr__ 进行委托(delegate)

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:59 25 4
gpt4 key购买 nike

我遇到了代码,它有意使用 __getattr__ 进行委托(delegate)。

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 中找不到时,它被委托(delegate)给 classB。我发现这是基于实现委托(delegate)的原则,并且更喜欢子类化或类型检查作为将调用委托(delegate)给适当对象的直接方式。有些人认为这没问题并且是必需的。有没有人发现这其中有什么明显的不足,或者采用这种委托(delegate)策略是否好?

最佳答案

这种代码本质上很难理解,而且有点容易出错。在某些情况下,重写 __getattr__ 是完成任务的最直接方法,在这些情况下,就去做吧。但在可能的情况下总是更喜欢子类化或组合,因为 __getattr__ 覆盖可能很难正确。

关于python - 使用 __getattr__ 进行委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com