我尝试在
__init_subclass__
内访问父类的classmethod
,但似乎不起作用。假设以下示例代码:class Foo:
def __init_subclass__(cls):
print('init', cls, cls.__mro__)
super(cls).foo()
@classmethod
def foo(cls):
print('foo')
class Bar(Foo):
pass
产生以下异常:
AttributeError: 'super' object has no attribute 'foo'
cls.__mro__
显示Foo
是其中的一部分:(<class '__main__.Bar'>, <class '__main__.Foo'>, <class 'object'>)
。因此,我不明白为什么super(cls).foo()
不能转发到Foo.foo
。有人能解释一下吗?
super(cls)
更改为super(cls, cls)
。使用单参数形式,您最终会在Foo
的父类(即object
)中查找foo
方法。 - Aran-Feysuper(cls)
?未绑定的超类很少有用,而且它们不是你在这里要找的。如果你只是想调用cls
的foo
类方法的父类,那就像实例方法一样使用super(cls, cls).foo()
。如果你想做一些不同的事情……那么呢? - abarnert