__init__ 是初始化方法,负责设置实例属性;__str__ 是返回用户友好字符串表示的方法。前者在对象创建时自动调用,参数含 self 且不返回值;后者被 print() 或 str() 调用,必须返回 str 类型。
__init__
是对象创建时自动调用的初始化方法,负责设置实例属性;
__str__
是当使用
或
转换对象时被调用,用于返回一个**对用户友好的字符串表示**。
__init__:控制对象怎么“出生”
它不是构造函数(Python 中真正创建对象的是
),而是初始化函数。只要用类名加括号创建实例,它就会自动执行。
第一个参数必须是
,代表当前正在初始化的实例
可以接受任意额外参数,常用来接收初始值并赋给
不需要返回值(或隐式返回
),返回其他值会引发
例如:
class Person:def __init__(self, name, age):self.name = nameself.age = agep = Person("小明", 25) # 自动调用 __init__,设置 name 和 age
__str__:决定 print(p) 看到什么
它的核心作用是提供**可读性强、面向用户的字符串描述**,比如调试、日志、终端输出时看到的内容。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
立即学习
“
Python免费学习笔记(深入)
”;
必须返回一个
类型对象,返回其他类型会报错
不建议在其中抛异常或做复杂计算,应保持轻量、稳定
如果没定义
,Python 会回退到
(后者更偏向开发者和调试用途)
接上例补充:
def __str__(self):return f"Person(name='{self.name}', age={self.age})"print(p) # 输出:Person(name='小明', age=25)
两个方法配合使用的典型场景
日常开发中,它们常一起出现,让类既支持灵活创建,又具备清晰表达能力:
定义数据容器类(如
、
、
)时,用
接收必要字段,用
给出简洁摘要
写命令行工具时,
可返回一行格式化信息,方便用户快速理解对象状态
单元测试中,打印对象看结果是否符合预期,靠的就是
的可读性
常见误区提醒
不是构造器:不能通过它控制是否生成实例(要用
)
不等于调试用的
:后者推荐返回能“重建对象”的字符串(如
)
不要在
里修改对象状态——它应该是纯函数式的、无副作用的
如果类有继承关系,记得在子类
中显式调用
来初始化父类部分
print()str()__new__selfself.xxxNoneTypeErrorstr__str____repr__BookPointConfig__init____str____str____str____init____new____str____repr__Person('小明', 25)__str____init__super().__init__()