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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:54:02