在Python中调用父类普通方法的子类方法

时间:2018-02-28 16:14:32

标签: python

考虑Python中的以下片段:

class A:
    def f(self, arg):
        print(self, arg)

class B(A):
    @classmethod
    def f(cls, arg):
        super(B, cls).f(arg)
        print(cls, arg)

B.f(1)

我知道这样写是错的,但我试图了解幕后发生的事情。为什么我需要在调用继承函数时显式传递第一个参数?如果运行此代码段,我会得到一个异常,即未提供所需的位置参数。

当我调用B.f(1)时,第一个参数(类B)被隐式传递。当我通过类实例调用继承的普通方法时,我认为情况应该是这样的:self应该是类B

它是一些翻译魔术吗 - 比如,它看着类A,看到f是普通函数,并没有隐式设置第一个参数,因为它被称为类方法

1 个答案:

答案 0 :(得分:0)

我只需更改

即可成功运行代码
super (B, cls).f(arg)

为:

super (B, cls).f (cls, arg)

它工作正常。我猜这个课不是隐式传递。