考虑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
是普通函数,并没有隐式设置第一个参数,因为它被称为类方法
答案 0 :(得分:0)
我只需更改
即可成功运行代码super (B, cls).f(arg)
为:
super (B, cls).f (cls, arg)
它工作正常。我猜这个课不是隐式传递。