Как вызвать super () в Python 3.0? - PullRequest
       31

Как вызвать super () в Python 3.0?

0 голосов
/ 31 августа 2009

У меня самая странная ошибка, которую я когда-либо видел в Python (версия 3.0).

Изменение подписи функции влияет на то, работает ли super(), несмотря на то, что она не принимает аргументов. Можете ли вы объяснить, почему это происходит?

Спасибо

Chris

>>> 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 ]

6 голосов
/ 31 августа 2009

Как документы говорят: «Форма с нулевым аргументом автоматически ищет в кадре стека класс (__class__) и первый аргумент». Ваш первый пример __new__ не имеет первого аргумента - он утверждает, что его можно вызвать с нулевым или большим количеством аргументов, поэтому без аргументов super ставится в тупик. Ваш второй пример имеет явный первый аргумент, поэтому поиск в кадре стека завершается успешно.

1 голос
/ 31 августа 2009

python 3.0 new super пытается динамически сделать выбор для вас здесь, прочитайте этот PEP здесь , который должен объяснить все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...