我有三个课程A
,B
和C
。
A
有一个方法hello(self)
。 B
继承自A
并实施新方法hello(self)
。 C
继承自B
并重新实施方法hello(self)
。
现在,如果我创建了一个实例b = B()
并致电b.hello()
,则会调用它B.hello(b)
。
问题在于,当我创建对象c = C()
并致电c.hello()
时,它实际上会调用B.hello(c)
而不是C.hello(c)
。那是为什么?
我的代码如下所示:
class A:
def hello(self):
self.helloHandler()
def helloHandler(self):
print('class A method')
class B(A):
def helloHandler(self):
print('class B method')
class C(B):
def helloHandler(self):
print('class C method')
c = C()
c.hello()
这有效但不是我的。我的代码在这一点上有几千行...不能真正发布它但这就是重点。我不知道可能是什么问题。我使用abcmeta,如果由于一些不明确的理由迫使子类实现一些方法。
编辑:我弄乱了两个看起来相同的物体。一切都按预期工作!
答案 0 :(得分:2)
我无法重现你的问题。以下是您定义的设置,B
继承自A
但重载其方法; C
继承自B
但又重载其方法。
创建C
的实例并调用hello()
使用C
中正确的重载方法。
class A:
def hello(self):
print('class A method')
class B(A):
def hello(self):
print('class B method')
class C(B):
def hello(self):
print('class C method')
c = C()
c.hello()
# prints
class C method
答案 1 :(得分:0)
我在所有班级之间感到困惑。我有两个看起来非常相似的对象......一切正常。