Python打印Square类对象报错TypeError: __str__ returned non-string (type tuple)
报错核心原因
你定义的__repr__方法返回了(self.lenSide, self.color)元组而非字符串类型。Python打印类实例时会优先调用__str__方法,若类中未定义__str__则会自动调用__repr__方法,二者要求返回值必须为字符串,因此触发该类型错误。
修复方案
1. 核心错误修复
直接修改__repr__方法的返回值为字符串格式即可解决打印报错问题,示例修改如下:
def __repr__(self): return f"Square(边长: {self.lenSide}, 颜色: {self.color})"
2. 类中其他逻辑问题修正
你的类中还有多处不符合实例方法设计规范的问题,可同步调整避免后续触发其他报错:
- 实例取值类方法不需要额外传参,直接读取实例自身存储的属性即可,比如
getSide、getArea、getPerm、describe方法都删除冗余入参 - 面积计算逻辑错误,边长相加得到的是两倍边长,正确逻辑是边长的平方
- 字符串拼接时注意数字类型要做转换,避免
int和str拼接报错
完整可运行代码
class Square: def __init__(self, lenSide, color): self.lenSide = lenSide self.color = color def __repr__(self): return f"Square(边长: {self.lenSide}, 颜色: {self.color})" def getSide(self): return self.lenSide def getArea(self): return self.lenSide ** 2 def getPerm(self): return self.lenSide * 4 def setColor(self, color): self.color = color def describe(self): print(f"I am a {self.color} square with side {self.lenSide}") def mySquare(): newSquare = Square(5, "red") print(newSquare) mySquare()
内容的提问来源于stack exchange,提问作者NixelPix
相关产品推荐
相关产品推荐

