Как объединить объект со строкой?

как объединить 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 объект должен быть автоматически преобразован в строку.


если это имеет смысл для вашего