python2.7 的 super() 会跳过直接父项吗?
super() of python2.7 skips direct parents?
当我试图从 class C
调用 class B
的 bar()
时,它是 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"
因为super(sub_class, instance).method()
表示在实例instance
上调用sub_class
的parent的方法method
。由于 B
的父级是 A
,因此结果是有道理的。
你要的是super(C, self).bar()
.
当我试图从 class C
调用 class B
的 bar()
时,它是 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"
因为super(sub_class, instance).method()
表示在实例instance
上调用sub_class
的parent的方法method
。由于 B
的父级是 A
,因此结果是有道理的。
你要的是super(C, self).bar()
.