__init__ 是初始化方法,负责设置实例属性;__str__ 是返回用户友好字符串表示的方法。前者在对象创建时自动调用,参数含 self 且不返回值;后者被 print() 或 str() 调用,必须返回 str 类型。

__init__ 是对象创建时自动调用的初始化方法,负责设置实例属性;__str__ 是当使用 print() 或 str() 转换对象时被调用,用于返回一个**对用户友好的字符串表示**。
__init__:控制对象怎么“出生”
它不是构造函数(Python 中真正创建对象的是 __new__),而是初始化函数。只要用类名加括号创建实例,它就会自动执行。
- 第一个参数必须是
self,代表当前正在初始化的实例 - 可以接受任意额外参数,常用来接收初始值并赋给
self.xxx - 不需要返回值(或隐式返回
None),返回其他值会引发TypeError
例如:
class Person:def __init__(self, name, age):
self.name = name
self.age = age
p = Person("小明", 25) # 自动调用 __init__,设置 name 和 age
__str__:决定 print(p) 看到什么
它的核心作用是提供**可读性强、面向用户的字符串描述**,比如调试、日志、终端输出时看到的内容。
本书图文并茂,详细讲解了使用LAMP(PHP)脚本语言开发动态Web程序的方法,如架设WAMP平台,安装与配置开源Moodle平台,PHP程序设计技术,开发用户注册与验证模块,架设LAMP平台。 本书适合计算机及其相关专业本、专科学生作为学习LAMP(PHP)程序设计或动态Web编程的教材使用,也适合对动态Web编程感兴趣的读者自觉使用,对LAMP(PHP)程序设计人员也具有一定的参考价值。
立即学习“Python免费学习笔记(深入)”;
- 必须返回一个
str类型对象,返回其他类型会报错 - 不建议在其中抛异常或做复杂计算,应保持轻量、稳定
- 如果没定义
__str__,Python 会回退到__repr__(后者更偏向开发者和调试用途)
接上例补充:
def __str__(self):return f"Person(name='{self.name}', age={self.age})"
print(p) # 输出:Person(name='小明', age=25)
两个方法配合使用的典型场景
日常开发中,它们常一起出现,让类既支持灵活创建,又具备清晰表达能力:
- 定义数据容器类(如
Book、Point、Config)时,用__init__接收必要字段,用__str__给出简洁摘要 - 写命令行工具时,
__str__可返回一行格式化信息,方便用户快速理解对象状态 - 单元测试中,打印对象看结果是否符合预期,靠的就是
__str__的可读性
常见误区提醒
-
__init__不是构造器:不能通过它控制是否生成实例(要用__new__) -
__str__不等于调试用的__repr__:后者推荐返回能“重建对象”的字符串(如Person('小明', 25)) - 不要在
__str__里修改对象状态——它应该是纯函数式的、无副作用的 - 如果类有继承关系,记得在子类
__init__中显式调用super().__init__()来初始化父类部分





