Python super:基类方法调用另一种方法

时间:2014-08-02 16:38:04

标签: python super

我使用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()?

1 个答案:

答案 0 :(得分:4)

在所有情况下,

self 仍然是Derived个实例

super()找到overriden方法,将其绑定到self ,您交换类。 super(Derived, self).f2f2类上找到下一个Base方法,并将其绑定到self。当被呼叫时,self仍然是同一个实例,在f1上调用self将调用Derived.f1