super () из python2.7 пропускает прямых родителей? - PullRequest
0 голосов
/ 01 июня 2018

Когда я попытался вызвать bar() из class B из class C, который является прямым подклассом B, оказалось, что bar() из 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 голосов
/ 01 июня 2018

Это потому, что super(sub_class, instance).method() означает вызов метода method родительского элемента или sub_class в экземпляре instance.Так как родительский элемент B равен A, результат имеет смысл.

То, что вы хотите - super(C, self).bar().

...