假设我有一个类:
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
转换为其字符串表示