该错误源于子类未正确定义__init__方法(如拼写为__int__或缩进错误),导致实例化时回退至object.__init__(),而它仅接受self参数;需检查__init__前后双下划线是否完整、无全角字符、缩进一致,并用dir(YourClass)确认其存在。

TypeError: object() takes no parameters 的真实来源
这个错误不是说 object() 本身被调用了,而是你继承了 object(或没显式继承任何类,Python 3 中默认就是 object),又在子类中写了带参数的 __init__ 方法,但父类没有对应接收逻辑——最常见的情况是把 __init__ 拼错了,比如写成 _init_、__int__、__init 等,导致 Python 根本没找到构造方法,于是退回到父类 object.__init__,而它确实不接受任何参数。
检查 __init__ 拼写错误的实操步骤
别急着改代码,先确认是不是拼写问题。这类错误不会报“找不到 __init__”,只会静默跳过你的方法,然后在实例化时爆错。
- 用编辑器搜索整个类定义,查找所有含
__init的行,逐个核对:前后必须都是两个下划线,共四个,不能少、不能多、不能混用短横或空格 - 特别注意复制粘贴来的代码——有时会混入全角字符或零宽空格,肉眼难辨;可把疑似行删掉,手动重打
def __init__(self, ...): - 检查缩进是否一致,如果
def __init__和 class 其他方法缩进不一致(比如多了一层或少了一层),也可能导致它没被识别为方法 - 运行
dir(YourClass),看输出里有没有'__init__';如果没有,说明该方法未正确定义
为什么 __init__ 写错后会调到 object.__init__?
Python 实例化时,会按 MRO 查找 __init__。如果你的类没定义有效的 __init__,就会一路向上找到 object.__init__。而它的签名是 def __init__(self),不接受除 self 外的任何参数——所以当你传了 name="Alice",就触发 TypeError: object() takes no parameters。
这不是语法错误,是运行时行为偏差,所以静态检查工具(如 mypy)通常抓不到,必须靠人工核对或运行时调试。
立即学习“Python免费学习笔记(深入)”;
其他可能触发该错误的场景(非拼写问题)
拼写正确但仍报错?往下排查这几个点:
- 你在
__init__里调用了super().__init__(...),但传了参数给object;比如super().__init__(name)—— 这不行,object.__init__不收参,应改为super().__init__()或直接去掉(除非你真要向上传参给某个中间父类) - 使用了多重继承,MRO 中某个父类的
__init__被跳过或覆盖,导致最终落到object;可用YourClass.__mro__查看解析顺序 - 类里定义了
__new__但没正确返回实例,或返回了未初始化的对象,也会绕过__init__;此时错误可能延迟出现,但根源仍在初始化链断裂
真正卡住的时候,往往不是语法不对,而是那个下划线少打了一个、或者 IDE 自动补全帮你补成了 __int__——这种细节在快速编码时极难一眼发现。


















