Python运行Cards类代码报__str__方法TypeError是何原因
报错根因
你遇到的TypeError: __str__() takes 0 positional arguments but 1 was given错误,核心原因是Python类的实例方法存在固定传参规则:通过实例调用方法时,Python会自动将实例本身作为第一个位置参数传入方法,对应方法定义时的第一个形参通常命名为self。你定义的__str__方法没有声明这个形参,调用时自动传入的实例参数无处接收,就触发了参数数量不匹配的报错。
除此之外你的代码还有两处会导致运行失败/输出错误的问题:
- 实例化
Cards类时,传入的第二个字符串"Diamond缺少闭合的双引号,会触发语法错误 __init__方法定义的参数顺序是suit(花色)在前、rank(点数)在后,你传入参数时顺序写反了,就算不报错输出内容也会颠倒为Diamond of Queen,不符合预期
修复方法
- 给
__str__方法的定义加上self作为第一个形参 - 补全字符串缺失的闭合双引号
- 调整实例化时的传参顺序,先传花色、再传点数
修复后可运行代码
class Cards(): def __init__(self,suit, rank): self.suit = suit self.rank = rank def __str__(self): return self.rank + " of " + self.suit card = Cards("Diamond", "Queen") print(card)
运行输出
Queen of Diamond
内容的提问来源于stack exchange,提问作者Will108
相关产品推荐
相关产品推荐

