python - 在 Python 中调用基类的类方法

标签 python class overriding class-method

考虑以下代码:

class Base(object):

    @classmethod
    def do(cls, a):
        print cls, a

class Derived(Base):

    @classmethod
    def do(cls, a):
        print 'In derived!'
        # Base.do(cls, a) -- can't pass `cls`
        Base.do(a)

if __name__ == '__main__':
    d = Derived()
    d.do('hello')

> $ python play.py  
> In derived! 
> <class '__main__.Base'> msg

Derived.do,如何调用Base.do

如果这是一个普通的对象方法,我通常会直接使用 super 甚至基类名称,但显然我找不到在基类中调用类方法的方法。

在上面的例子中,Base.do(a) 打印 Base 类而不是 Derived 类。

最佳答案

如果您使用的是新样式类(即从 Python 2 中的 object 派生,或者始终在 Python 3 中),您可以使用 super() 像这样:

super(Derived, cls).do(a)

这就是在设置了 cls 的情况下从派生类调用基类方法版本(即 print cls, a)中的代码的方式到派生类。

关于python - 在 Python 中调用基类的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1269217/

相关文章:

python - Django rest framework - 如何进行不区分大小写的 View 集搜索

python - 如何在 Python 中计算自协方差

python - 实现一个名为 Average 的类作为 List 的子类

java - 将调用哪个 Java 方法(继承,无 @Override)

ruby-on-rails - 以 DRY 方式覆盖 ActiveRecord 中的 "find"

python - 移位插值没有给出预期的行为

python - 在 python tkinter 中设置滚动条位置的正确方法

Java:另一个类中的方法未显示

从不同文件导入类时,Python 3 是实例意外行为吗?

Java 重写和接口(interface)