Skip to main content
 首页 » 编程设计

Python:在 super 方法调用中调用子类的方法

2025年05月04日7jiqing9006

编辑:我的假设是错误的;下面的代码确实像我想要的那样工作。我观察到的行为原来是由我正在使用的另一段代码引起的,我忽略了它,因为它看起来完全不相关。

所以我有一些代码结构如下:

class B(object): 
    def foo(self): 
        print "spam" 
 
    def bar(self): 
        do_something() 
        self.foo() 
        do_something_else() 
 
class C(B): 
    def foo(self): 
        print "ham" 
 
    def bar(self): 
        super(C, self).bar() 
        print "eggs" 
 
c = C() 
c.bar() 

这将执行 do_something(),打印“spam”,do_something_else(),然后打印“eggs”。然而,我想要做的是 do_something(),打印“ham”,do_something_else(),然后打印“eggs”。换句话说,我想从 C 的 bar 方法调用 B 的 bar 方法,但我希望它调用 C 的 foo 方法,而不是 B 的。

有没有办法做到这一点?请注意,在我处理的实际代码中,B 类和实际调用 c.bar() 的代码都是不断发展的第三方库的一部分,因此不得已而为之。

请您参考如下方法:

您发布的代码可以满足您的要求。

当 B.bar 调用 self.foo() 时 self 是 C 类型的对象,它将调用 C.foo。

这是有效的,因为首先在 self 上查找 self.foo,然后在 self 的实际类型的 method-resolution-order C3-线性化类和基类元组(这里是 (C, B, object))。这将在 B.foo 之前返回 C.foo。