Как объединить объект со строкой?
как объединить 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'))
)
3 ответов
просто определить __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__()
).
_string = Foo('text') + 'string'
проблема с этой строкой заключается в том, что Python думает, что вы хотите добавить string
к объекту типа Foo
, а не наоборот.
это сработало бы, если бы вы написали:
_string = "%s%s" % (Foo('text'), 'string')
редактировать
вы можете попробовать это с
_string = 'string' + Foo('text')
в этом случае Foo
объект должен быть автоматически преобразован в строку.