super() 不是要与静态方法一起使用吗?
当我尝试类似的东西时
class First(object):
@staticmethod
def getlist():
return ['first']
class Second(First):
@staticmethod
def getlist():
l = super(Second).getlist()
l.append('second')
return l
a = Second.getlist()
print a
我收到以下错误
Traceback (most recent call last):
File "asdf.py", line 13, in <module>
a = Second.getlist()
File "asdf.py", line 9, in getlist
l = super(Second).getlist()
AttributeError: 'super' object has no attribute 'getlist'
如果我将静态方法更改为类方法并将类实例传递给 super(),一切正常。我在这里错误地调用了 super(type) 还是我遗漏了什么?
原文由 Ben J 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的回答
是:是的,你叫错了……而且(事实上, _因为_)你遗漏了一些东西。
但是不要难过;这是一个极其困难的课题。
该 文档 指出
未绑定 的用例
super
对象极其狭窄且罕见。请参阅 Michele Simionato 的这些文章,了解他对super()
的讨论:此外,他强烈主张 在此处 从 Python 3 中删除未绑定的
super
。我说过你称它为“错误”(尽管没有上下文,正确性在很大程度上是没有意义的,而且玩具示例并没有提供太多上下文)。因为 unbound
super
非常罕见,而且可能完全没有道理,正如 Simionato 所说,使用super()
的“正确”方法是提供第二个论点。在您的情况下,使您的示例工作的最简单方法是
如果您认为那样看起来很有趣,那您就没错。但我认为大多数人在看到
super(X)
时所期待的(或者当他们在自己的代码中尝试时希望看到的)是 Python 给你的,如果你这样做的话super(X, X)
。