有没有一种方法可以为包含自身的类定义递归__repr_



假设我有一个类:

class Band():
def __init__(self, name, members):
self.name = name
self.members = members
def __repr__(self):
return f'''{self.name} [{', '.join(self.members)}]'''

如果我创建两个这样的实例:

Band_A = Band('Band A', ['Tom', 'Josh'])
Band_B = Band('Band B', ['Mark', 'Steve'])

当我打印它们时,我得到了预期的结果:

Band A [Tom, Josh]
Band B [Mark, Steve]

但是,当我创建一个包含它自己的类的实例时,它就不起作用了。

Band_C = Band('Band C', [Band_A, Band_B])

我得到这个错误:

Traceback (most recent call last):
File "c:/Users/IcyTear/Desktop/test.py", line 16, in <module>
print(Band_C)
File "c:/Users/IcyTear/Desktop/test.py", line 7, in __repr__
return f'''{self.name} [{', '.join(self.members)}]'''
TypeError: sequence item 0: expected str instance, Band found

有没有一种方法可以让它工作,这样它就会显示出来?

Band C [Band A [Tom, Josh], Band B [Mark, Steve]]

__repr__(self)更改为

def __repr__(self):
return f'''{self.name} [{', '.join(map(repr, self.members))}]'''

获取

Band C [Band A [Tom, Josh], Band B [Mark, Steve]]

str.join()想要一个可迭代的字符串,所以使用map(repr, ...)显式地将每个member转换为其字符串表示

最新更新