【发布时间】:2015-11-14 06:21:34
【问题描述】:
给定以下代码
class A:
def __init__(self ):
self.b = B()
def __repr__(self):
#return "<A with {} inside>".format( self.b )
#return "<A with " + repr(self.b) + " inside>"
return "<A with " + self.b + " inside>" # TypeError: Can't convert 'B' object to str implicitly
class B:
def __repr__(self):
return "<B>"
a = A()
print(a)
我想知道为什么在将 A 的 self.b“添加”到字符串时不调用 B 的 __repr__。
【问题讨论】:
-
与
"three " + 3失败的原因相同。有没有办法让对象表现为字符串? -
是的,显式将其转换为字符串,使用
str或repr,或使用字符串格式:"<A with {!r} inside>".format(self.b)。 Python 是强类型,不会发生隐式转换。 -
好的,所以没有像 Ruby 的运算符重载这样的事情(我脑子里有这个)。
-
如果你使用 str.format 而不是连接字符串呢?
-
@handle 运算符覆盖是一件事——在这里工作不是一个好方法,但你可以做到这一点。它还依赖于您以特定顺序执行“添加”(或者更确切地说,您必须在“B”之后有一个字符串。所以,是的,这不是一个好主意。