遇到此类错误时要考虑的其他事项:
我遇到了这个错误消息,发现这篇文章很有帮助。事实证明,我重写了__init__()
存在对象继承的位置。
继承的示例相当长,因此我将跳到一个不使用继承的更简单的示例:
class MyBadInitClass:
def ___init__(self, name):
self.name = name
def name_foo(self, arg):
print(self)
print(arg)
print("My name is", self.name)
class MyNewClass:
def new_foo(self, arg):
print(self)
print(arg)
my_new_object = MyNewClass()
my_new_object.new_foo("NewFoo")
my_bad_init_object = MyBadInitClass(name="Test Name")
my_bad_init_object.name_foo("name foo")
结果是:
<__main__.MyNewClass object at 0x033C48D0>
NewFoo
Traceback (most recent call last):
File "C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py", line 41, in <module>
my_bad_init_object = MyBadInitClass(name="Test Name")
TypeError: object() takes no parameters
PyCharm没有抓住这种错别字。Notepad ++也没有(其他编辑器/ IDE也可能)。
当然,这是一个“不带任何参数”的TypeError,与期望得到一个的“得到两个”没有太大区别,就Python中的对象初始化而言。
解决主题:在语法上正确的情况下将使用重载初始化程序,但在语法上正确的情况下将被使用,而是使用内置初始化程序。该对象不会期望/处理此问题,并且会引发错误。
如果出现sytax错误:修复很简单,只需编辑自定义init语句即可:
def __init__(self, name):
self.name = name
self
。因此,声明def method(arg):
方法错误是应该的def method(self, arg):
。当方法dispatch尝试针对它调用method(arg):
并匹配两个参数self, arg
时,您会收到该错误。