3

出于某种原因,我很难理解__init____new__。我有一堆在终端上运行良好的代码,但是当我将它作为 Google 快速搜索框的插件加载时,我得到了错误TypeError: default __new__ takes no parameters

我一直在阅读有关该错误的信息,这有点让我的大脑旋转。就目前而言,我有 3 个类,没有子类,每个类都有自己def的 s。我从不使用def __init__or def __new__,但我有一种明显的感觉,即这些功能(或缺少这些功能)会给我带来错误。

我不知道如何将代码总结成一个在这里会有所帮助的片段,因为我有点不知所措,但整个脚本可以在github找到。没想到有人会为我修复我的代码,我对此束手无策。一个简单的(简单的英语,而不是我已经阅读了 20 次但仍然不太理解的 python 文档的引用)解释为什么会弹出这个错误,或者为什么我应该或不应该使用__init__and/或__new__功能将不胜感激。

4

2 回答 2

7

重现问题的最简单方法:

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

所以看起来你的代码中有一个没有__init__定义的类(不是从终端运行时,而是你做了非常不同的导入),并且你在某个地方调用带有一些参数的类。在错误回溯中,您应该获得调用发生的位置(如果没有,例如由于 GUI 的细微差别,您可以在所有内容周围使用 try/except 并确保将回溯转储到 except 子句中的 /tmp 文件,使用标准库中的模块traceback)。

于 2010-03-12T01:40:03.793 回答
2

您似乎缺少一些基本的类构造概念。

__init__方法在类第一次被init初始化时使用,并且是您设置其内部的方式。您还想利用 Python 的新型类(Python 3 中的默认类)。

I would suggest starting with Dive Into Python and branching out from there.

于 2010-03-12T01:44:32.257 回答