如何在没有重载和显式类型转换(Object
)的情况下将str()
与字符串(基元)连接起来?
class Foo:
def __init__(self, text):
self.text = text
def __str__(self):
return self.text
_string = Foo('text') + 'string'
输出:
Traceback (most recent call last):
File "test.py", line 10, in <module>
_string = Foo('text') + 'string'
TypeError: unsupported operand type(s) for +: 'type' and 'str'
运算符+
必须重载?
还有其他方法(只是想知道)吗?
PS:我知道重载运算符和类型转换(如str(Foo('text'))
)
答案 0 :(得分:11)
只需定义__add__()
和__radd__()
方法:
class Foo:
def __init__(self, text):
self.text = text
def __str__(self):
return self.text
def __add__(self, other):
return str(self) + other
def __radd__(self, other):
return other + str(self)
将根据您是Foo("b") + "a"
(致电__add__()
)还是"a" + Foo("b")
(致电__radd__()
)来致电他们。
答案 1 :(得分:4)
_string = Foo('text') + 'string'
这一行的问题在于Python认为你想要string
添加Foo
类型的对象,而不是相反。
如果你写的话会有用:
_string = "%s%s" % (Foo('text'), 'string')
修改强>
您可以尝试
_string = 'string' + Foo('text')
在这种情况下,您的Foo
对象应自动转换为字符串。
答案 2 :(得分:1)
如果这对您的Foo
对象有意义,则可以按如下方式重载__add__
方法:
class Foo:
def __init__(self, text):
self.text = text
def __str__(self):
return self.text
def __add__(self, other):
return str(self) + other
_string = Foo('text') + 'string'
print _string
示例输出:
textstring