我有一个自定义类,我在第二个类中实例化了两次:
[编辑:旧代码并没有真正捕捉到我的问题,我正在重写以使其更清晰。Foo 将通过使用回调函数来处理网络事件(我需要多个连接,因此 Bar 将有多个 Foo 字段并且不能只继承)。在 Bar 类中,我想覆盖回调来做一些不同的事情。在 Foo 中重写 callb 将不起作用,因为在其他情况下我确实从它继承]
class Foo(object):
def __init__(self, x):
self._x = x
#When an event happens, call callb()
self.on_certain_event(callback=callb)
def callb(self):
print self._x
def run(self):
waitForEventsInfinitely() #
class Bar(object):
def __init__(self):
self._foo = Foo(5)
#OVERWRITE THE EXISTING CALLBACK METHOD IN THE Foo CLASS!
self._foo.callb = self.callb
def callb(self):
print self._x * 10
def run(self):
waitForEventsInfinitely() # Not going to actually write t
f = Foo(2)
f.run()
b = Bar()
b.run()
[在 Foo 中调用 run() 时,它可以正常工作。但是,我无法从 Bar 覆盖 Foo 的 callb 方法 - Foo 应该引用的 self._x 正试图从 Bar 调用]
但是,在运行代码时,我收到错误“Bar has no attribute '_x'”而不是我的预期值 50。显然,Bar 测试中的 self 仍然指的是 Bar,而不是实际调用该方法的 Foo . 我本来希望它是 Bar 中的内部 Foo self._foo 字段。
我怀疑我的问题与名称修改有关,但是当我的 self 字段被覆盖时,我无法找到描述性来源。大多数示例似乎是当我从不同的类继承时。