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

时间:2009-08-31 05:30:10

标签: python python-3.x

我有一段奇怪的错误,我在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 个答案:

答案 0 :(得分:6)

正如the docs所说,“零参数形式自动在堆栈帧中搜索类(__class__)和第一个参数。”你的__new__的第一个例子没有第一个参数 - 它声称它可以用零个或多个参数调用,所以无争议的super是难以置信的。您的第二个示例DOES有一个明确的第一个参数,因此堆栈帧中的搜索成功。

答案 1 :(得分:1)

python 3.0 new super正在尝试动态地为您做出选择,请阅读本PEP here,它应该解释一切。