[英]Using __setattr__ and __getattr__ for delegation with __slots__ without triggering infinite recursion
[英]Using __getattr__ for delegation
我遇到了代碼,該代碼有意使用__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。 我發現這是基於實現委派的原則,並且希望將子類化或類型檢查作為將調用委派給適當對象的直接方法。 有些人認為這是正確的並且是必需的。 有人在這方面發現任何明顯的缺點嗎?還是采用這種策略進行委派很好?
這種代碼天生就很難遵循並且容易出錯。 在某些情況下,重寫__getattr__
是完成工作的最直接方法,在這種情況下,請堅持下去。 但是始終盡可能選擇子類化或合成,因為__getattr__
重寫可能會很痛苦。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.