如何在Python类定义中使用__str__方法输出格式化字符串?
问题分析与解决
你的代码里有几个关键错误,导致__str__方法无法正常工作:
- 构造函数用错了:Python类的构造函数是
__init__,你写的__main__方法完全没用,而且你在__init__里只做了打印,没有把传入的参数赋值给实例属性,导致self.nameo、self.age这些属性根本不存在,自然访问报错。 - __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
相关产品推荐
相关产品推荐

