我在写一个类来包装另一个类的对象。其目的是在能够扩展其所有其他接口的同时更改其一些方法行为。我不使用继承,因为内部类对象可能会死亡,而外部类需要能够在不破坏自身的情况下将其替换为活动的对象。在
所以我有:
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这个函数。然而,我不太明白为什么下面的建议似乎都使用了这么复杂的版本。为什么不能简单到:
^{pr2}$
我的解决方案类似于@khachik加上一些方法缓存。在
代码未经测试,请将其视为伪代码。
下面的代码可以满足您的需要,但是:1)它很难看;2)它不是线程安全的;3)它陷入循环,直到
Inner
中的某个方法引发异常(这不是由于实现,而是由于最初发布的想法);4)避免使用它的其他原因:)相关问题 更多 >
编程相关推荐