Python类中__repr__魔法方法无法返回实例参数的技术问询
问题排查与解决:__repr__魔法方法无法返回实例参数
你遇到的问题很典型——你的__repr__方法里的字符串没有使用字符串格式化语法,导致Python只是把包含{self.name}的文本原样返回,而没有解析这些变量的实际值。
修复后的代码
只需要把__repr__方法改成下面任意一种写法即可:
方案1:使用f-string(推荐,Python 3.6+支持)
def __repr__(self): return f"Item('{self.name}', {self.price}, {self.quantity})"
方案2:使用str.format()
def __repr__(self): return "Item('{}', {}, {})".format(self.name, self.price, self.quantity)
方案3:使用旧式%格式化
def __repr__(self): return "Item('%s', %s, %s)" % (self.name, self.price, self.quantity)
为什么原来的写法不行?
你原来的代码里,返回的是一个普通字符串:
return "Item('{self.name}', {self.price}, {self.quantity})"
Python不会自动识别并替换字符串里的{self.name}这类表达式,必须明确告诉它要进行格式化操作——上面的三种方案都是让Python把实例的属性值代入到字符串对应的位置上。
额外小提示
__repr__的设计目标是返回能重建该实例的合法Python代码,修复后的写法完全符合这个标准——你可以直接复制repr(item1)的输出,就能创建一个和item1属性完全一致的新实例。
内容的提问来源于stack exchange,提问作者Anshul Thakur
相关产品推荐
相关产品推荐

