You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类用__int__或_init_为何初始化报TypeError/AttributeError?

触发重复问题关闭的典型错误写法

如果你的问题被作为本问题的重复问题关闭,原因是你提供的代码示例中出现了以下两类拼写错误之一:

  • 误将类构造方法名写为__int__(把init拼写成了int):
class Example:
    def __int__(self, parameter):
        self.attribute = parameter
  • 构造方法名前后的下划线数量写错,写成单下划线包裹的_init_:
class Example:
    def _init_(self, parameter):
        self.attribute = parameter
错误对应的典型报错表现

当你使用上述错误写法后,尝试创建类实例时会触发参数不匹配错误:

>>> Example("an argument")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Example() takes no arguments

部分Python版本中,该错误的提示文本可能为 TypeError: object.__new__() takes no parameters。

如果定义构造方法时没有额外参数,报错会表现为实例访问对应属性时提示属性不存在:

>>> class Example:
...     def __int__(self): # 也可能是写成了_init_
...         self.attribute = 'value'

>>> Example().attribute
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Example' object has no attribute 'attribute'
常见相关问题解答
  • 这些异常和拼写错误有什么关联?
    Python类的实例初始化构造方法有固定的命名要求:方法名必须是__init__,名字前后各有两个连续的下划线。如果方法名拼写不符合要求,Python不会将其识别为创建实例时自动调用的构造方法:此时创建实例传入的参数没有对应的接收入口,就会抛出“类不接收参数”的错误;同时拼写错误的方法不会在实例化时自动执行,方法内部定义的实例属性自然不会被绑定到实例上,访问属性时就会抛出“属性不存在”的错误。
  • 为什么这类错误不会在类定义阶段被提前检测到?
    Python语法允许类中定义任意合法名称的方法:__int__本身就是Python预留的特殊方法,作用是定义实例被int()转换时的逻辑;_init_则是完全合法的普通方法名称。因此解释器在加载类定义时不会判定这是语法错误,问题只会在实例创建、属性访问等实际运行环节暴露。
  • 编码时如何规避这类低级拼写错误?
    • 牢记Python双下划线特殊方法(俗称“dunder方法”)的命名规则,不要混淆方法名、不要写错前后的下划线数量
    • 开启编辑器/IDE的Python语法补全功能,编写构造方法时通过自动补全生成__init__方法定义,减少手动逐字输入的拼写失误
    • 类定义完成后第一时间做简单的实例化、属性访问测试,尽早发现初始化逻辑的问题

这是专门为解决Python新手最常犯的两类构造方法拼写错误创建的人工规范问答条目。虽然纯拼写错误导致的问题通常会以重复问题为由关闭,但本场景涉及Python特殊方法机制的基础知识点,设置统一的重复问题指向可以提升社区问题处理效率,本问题设计时也充分考虑了各类关键词的搜索匹配便利性。

反向场景参考:如果在实现整数转换逻辑时,误将__int__方法写为__init__,会触发TypeError: __init__() should return None, not 'int'错误,可查找对应问题的解答。

内容的提问来源于stack exchange,提问作者Karl Knechtel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:33:29