Отраженное дополненное дополнение (__iadd__) в Python? - PullRequest
1 голос
/ 16 апреля 2019

Для более «простого» кода мне было интересно, можно ли выполнить зарезервированное / отраженное назначение дополненного дополнения.

[Я проверял переполнение стека для похожих вопросов, но не могу найти ни одного.Поэтому, если это повторение моих извинений, и, пожалуйста, не могли бы вы связать ответ.]

Например, строковое регулярное присваивание дает:

In[1]:  s = 'foo'
In[2]:  s += 'bar'
In[3]:  print(s)

Out[1]: foobar

Но есть ли способ сделать этос отраженным порядком, без выполнения s = 'bar' + s.

Так есть ли какая-либо операция, похожая на что-то вроде =+ (которая не является реальной), такая что:

In[1]:  s = 'foo'
In[2]:  s =+ 'bar'
In[3]:  print(s)

Out[1]: barfoo

Спасибозаранее за помощь:)

1 Ответ

1 голос
/ 16 апреля 2019

Этого не существует в Python. Вы не можете создать новый оператор, поэтому вы тоже не можете это реализовать. Но нет проблемы, которая не может быть решена с помощью еще одного уровня косвенности!

class ReflectedAugmentedAssignableString(object):
    def __init__(self, value):
        self.value = value

    def __iadd__(self, other):
        self.value = other + self.value
        return self

    def __unicode__(self):
        return self.value

raastring = ReflectedAugmentedAssignableString("foo")
raastring += "bar"
print(raastring)

>>> "barfoo"

Примечание: это ужасно ^, пожалуйста, не делайте этого.

...