我使用Python super
遇到了这种意外行为,所以我想我会问。我知道基本的super
用法,但希望有人在这里详细说明我的问题。考虑一下代码:
class Base (object):
def f1 (self):
print 'Base f1'
def f2 (self):
print 'Base f2'
self.f1()
class Derived (Base):
def f1 (self):
print 'Derived f1'
def f2 (self):
print 'Derived f2'
super(Derived, self).f2()
对Derived()。f2()的调用导致:
Derived f2
Base f2
Derived f1
我非常期待:
Derived f2
Base f2
Base f1
Base.f2()中的调用“self.f1()”是否应该调用Base.f1()?
答案 0 :(得分:4)
self
仍然是Derived
个实例。
super()
找到overriden方法,将其绑定到self
,您不交换类。 super(Derived, self).f2
在f2
类上找到下一个Base
方法,并将其绑定到self
。当被呼叫时,self
仍然是同一个实例,在f1
上调用self
将调用Derived.f1
。