python2.7的super()跳过直接父母?

时间:2018-06-01 04:31:51

标签: python inheritance super

当我尝试从bar()({1}}的直接子类class B调用class C B时,发现bar()的{​​{1}} class A被召唤了。但我明确要求应该使用B版本。如何将方法解析为A

的方法
class A(object):
    def bar(self):
        print('bar from A')

class B(A):
    def bar(self):
        print('bar from B')

class C(B):
    def bar(self):
        super(B, self).bar()

c = C()
# It should print "bar from B"
c.bar()
# But actually it prints "bar from A"

1 个答案:

答案 0 :(得分:1)

这是因为super(sub_class, instance).method()表示在实例method上调用sub_class的方法instance。由于B的父级是A,因此结果很有意义。

你想要的是super(C, self).bar()