类实例的表示不符合预期:调用类方法创建实例未得到预期输出
解决Python类实例自定义字符串表示的问题
嗨,这个问题我太熟悉了!你之所以看不到预期的Point(0, 0)输出,是因为Python的类默认没有为实例提供友好的字符串展示方式——默认的__repr__方法只会输出类似<__main__.Point object at 0x...>这样的内存地址信息,完全不是你想要的格式。
解决方法很简单,只需要给你的Point类添加一个__repr__魔法方法就行:
class Point: def __init__(self, x, y): self.x = x self.y = y @classmethod def zero(cls): return cls(0, 0) def __repr__(self): # 这个方法负责定义实例的"官方"字符串表示,尽量还原创建实例的代码 return f"Point({self.x}, {self.y})" point = Point.zero() print(point) # 现在会输出:Point(0, 0)
小补充:
__repr__是给开发者看的,按照Python的最佳实践,它的返回值应该是可以直接用来重建该实例的代码,所以我们用f-string把x和y的值拼进去,完美符合要求。- 如果还需要给普通用户展示更易懂的格式,可以额外添加
__str__方法,比如:
这时候def __str__(self): return f"坐标点:({self.x}, {self.y})"print(point)会用__str__的输出,而在交互式命令行里直接输入point会显示__repr__的结果。
内容的提问来源于stack exchange,提问作者Akshaltz
相关产品推荐
相关产品推荐

