铸器篇-Day76 魔术方法 str 自定义打印对象

0 次阅读 2026-10-20 09:19

📖 知识点

str 规则

  1. 方法名固定:__str__(self),只有 self 一个参数

  2. 必须 return 返回一个字符串,不能返回数字、列表等其他类型

  3. 触发时机:

    • print(对象)打印对象

    • str(对象)将对象转字符串

  4. 如果没有写__str__,print 对象默认输出类似 <__main__.Student object at 0x...>

基础示例

 

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __str__(self):
        # return 返回自定义字符串
        return f"学员姓名:{self.name},分数:{self.score}"

stu = Student("小明", 88)
print(stu) # 自动调用 __str__

 

输出:

 

学员姓名:小明,分数:88

 

⚠️ 易错坑

  • 一定要写 return,不要直接在方法内 print

  • 返回值只能是字符串,数字会直接报错

⚔️ Kata 实战任务

任务需求:

  1. 定义 Student 类,__init__接收 name, age, score

  2. 编写__str__魔术方法,返回字符串格式:【学员】姓名:xx | 年龄:xx | 分数:xx

  3. 实例化 stu = Student ("小雅",15,95)

  4. 直接 print (stu),观察打印效果

参考代码

 

class Student:
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    def __str__(self):
        # 自定义打印文本,return字符串
        return f"【学员】姓名:{self.name} | 年龄:{self.age} | 分数:{self.score}"


stu = Student("小雅", 15, 95)
print(stu)

 

运行输出:

 

【学员】姓名:小雅 | 年龄:15 | 分数:95

 

🧠 思考题

  1. 如果把__str__里面的 return 换成 print,print (stu) 会得到什么效果?

  2. __str__什么时候会自动触发,需要我们手动调用 stu.__str__()吗?