需要帮助理解Python中的“TypeError: default __new__ takes no parameters”错误
我有点搞不懂 __init__
和 __new__
这两个东西。我的代码在终端里运行得很好,但当我把它作为插件加载到 Google 快速搜索框时,就出现了一个错误:TypeError: default __new__ takes no parameters
。
我查了一些关于这个错误的资料,感觉脑袋都要转晕了。现在我有三个类,没有子类,每个类都有自己的 def
。我从来没有用过 def __init__
或 def __new__
,但我隐约觉得正是这些函数(或者说没有这些函数)导致了这个错误。
我不知道怎么把代码简化成一个有用的片段,因为我有点搞不清楚,但整个脚本可以在 github 上找到。我并不指望有人帮我修复代码,只是对这个问题感到很无奈。如果能给我一个简单的解释(用简单的语言,不要引用我看过20遍的Python文档,我还是不太明白),告诉我为什么会出现这个错误,或者我为什么应该使用或不应该使用 __init__
和/或 __new__
函数,我会非常感激。
2 个回答
你似乎缺少一些基本的类构造概念。
__init__
方法是在类第一次被初始化时使用的,它是用来设置类内部的内容的。你还应该利用 Python 的新式类(在 Python 3 中是默认的)。
我建议你从Dive Into Python 开始学习,然后再逐步深入。
最简单的方法来重现你的问题:
>>> class Bah(object): pass
...
>>> x = Bah(23)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: default __new__ takes no parameters
看起来你的代码里有一个类(在终端运行时不会出现这个问题,因为那时你导入的东西不同),这个类没有定义__init__
方法,而你在某个地方调用这个类时传入了一些参数。在错误的追踪信息中,你应该能找到调用发生的位置(如果没有找到,比如因为图形界面的细节问题,你可以在所有代码周围加上try/except,确保在except部分把追踪信息保存到/tmp文件里,使用标准库中的traceback
模块)。