我正在编写一个围绕另一个类的对象的类。其目的是在能够扩展其所有其他接口的同时,更改其某些方法行为。我不使用继承,因为内部类对象可能会死亡,而外部类需要能够在不破坏自身的情况下用活动对象替换它。
所以我有:
class Inner():
def foo(): pass
def goo(): pass
class Outer():
self.inner = InnerFactory(innerType)
def foo():
try:
self.inner.foo()
except:
del self.inner
self.inner = InnerFactory(innerType)
self.inner.foo()
问题是如何扩展goo w/o显式重写,因为我可能有很多其他我不知道的方法。
事实上,在阅读了下面的一些反馈后,我意识到我没有使用伟大的函数getattr。然而,我不太明白为什么下面的建议似乎都使用了如此复杂的版本。为什么不能简单到:
def __getattr__( self, name ):
if self.inner:
return getattr( self.inner, name )
else:
raise Exception( attribute %s not found % name )