如何在Python 3.0中调用super()?

0 投票
2 回答
931 浏览
提问于 2025-04-15 13:58

我在使用Python(3.0版)时遇到了一个非常奇怪的错误。

我发现如果改变函数的定义方式,会影响到super()的使用,尽管这个函数本身不需要任何参数。你能解释一下为什么会这样吗?

谢谢,

克里斯

>>> class tmp:
...     def __new__(*args):
...             super()
... 
>>> tmp()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __new__
SystemError: super(): no arguments
>>> class tmp:
...     def __new__(mcl,*args):
...             super()
... 
>>> tmp()
>>>

2 个回答

1

在Python 3.0中,新的super功能试图为你动态地做出选择。想要了解更多,可以阅读这个PEP文档,点击这里,里面会解释得很清楚。

6

正如文档所说,“零参数形式会自动在调用栈中查找类(__class__)和第一个参数。”你第一个例子中的__new__没有第一个参数——它声称可以用零个或多个参数调用,所以没有参数的super就不知道该怎么办了。而你第二个例子确实有一个明确的第一个参数,因此在调用栈中的查找就成功了。

撰写回答