Нужна помощь в понимании ошибки «TypeError: default __new__ не принимает параметры» в python - PullRequest
3 голосов
/ 12 марта 2010

По какой-то причине у меня возникают проблемы с перемещением головы __init__ и __new__. У меня есть куча кода, который отлично работает с терминала, но когда я загружаю его как плагин для окна быстрого поиска Google, я получаю сообщение об ошибке TypeError: default __new__ takes no parameters.

Я читал об ошибке, и это заставляет мой мозг вращаться. В настоящее время у меня есть 3 класса, без подклассов, каждый класс имеет свои def с. Я никогда не использую def __init__ или def __new__, но у меня появилось отчетливое ощущение, что именно эти функции (или их отсутствие) могут дать мне ошибку.

Я понятия не имею, как обобщить код до фрагмента, который был бы здесь полезен, поскольку я немного перегружен, но весь сценарий можно найти по адресу github . Не ожидая, что кто-нибудь исправит мой код для меня, я только нахожусь в конце этого. Простое (простой английский, а не цитата из документации по Python, которую я прочитал 20 раз и до сих пор не совсем понимаю) объяснение того, почему эта ошибка появляется, или почему я должен или не должен использовать __init__ и / или __new__ функции будут серьезно оценены.

Ответы [ 2 ]

7 голосов
/ 12 марта 2010

Самый простой способ воспроизвести вашу проблему:

>>> class Bah(object): pass
... 
>>> x = Bah(23)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: default __new__ takes no parameters

Похоже, в вашем коде есть класс (не при запуске из терминала, но затем вы выполняете очень разные операции импорта), для которого не определено __init__, и вы где-то вызываете класс с некоторыми параметрами. В трассировке ошибок вы должны получить место, где происходит вызов (если нет, например, из-за тонкостей графического интерфейса, вы можете использовать попытку / исключение вокруг всего и убедиться, что вы сбросили трассировку в файл / tmp в предложении кроме, используйте модуль traceback из стандартной библиотеки).

2 голосов
/ 12 марта 2010

Существует несколько базовых концепций построения классов, которые, похоже, вам не хватает.

Метод __init__ используется, когда класс впервые init ialized, и это то, как вы настраиваете его внутренние компоненты. Вы также хотите воспользоваться классами нового стиля Python (по умолчанию в Python 3).

Я бы предложил начать с Dive Into Python и разветвляться оттуда.

...