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

如何在Python类定义中使用__str__方法输出格式化字符串?

问题分析与解决

你的代码里有几个关键错误,导致__str__方法无法正常工作:

  1. 构造函数用错了:Python类的构造函数是__init__,你写的__main__方法完全没用,而且你在__init__里只做了打印,没有把传入的参数赋值给实例属性,导致self.nameo、self.age这些属性根本不存在,自然访问报错。
  2. __str__方法定义错误:__str__是Python的特殊方法,只能接收self这一个参数,你额外加了name、age参数,调用str(john)时Python只会传实例本身,参数数量不匹配就会报错。

修正后的代码

class Tenderloin:
    def __init__(self, nameo, age, nation, race, personality):
        # 把传入的参数赋值给实例属性
        self.nameo = nameo
        self.age = age
        self.nation = nation
        self.race = race
        self.personality = personality
        # 初始化时的打印可以保留
        print(f"Hi. My name is {nameo}. I am {age} years old.\nI come from {nation} of the {race} race. My personality is {personality}")
    
    # __str__只需要self参数
    def __str__(self):
        return f"This is {self.nameo}, {self.age}."

john = Tenderloin("John Jenkins", 23, "America", "black", "nice") 
jellaye = Tenderloin("Jellaye Flabbaghan", 48, "Hindustand", "Crustasian", "bellowing")
print(str(john))
print(str(jellaye))    

input("Please press Enter.")

补充说明

  • 不需要结合__repr__,__str__专门用来定义实例被转为字符串(比如print、str()调用时)的友好输出;__repr__更多是给开发者看的、能还原实例的正式表示,如果你不需要这个,只用__str__就够。
  • 类定义里的括号可以省略(如果没有继承其他类),Python里分号也不是必须的,去掉更符合PEP8规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:38:14