Для "более красивого" более простого кода мне было интересно, можно ли выполнить зарезервированное/отраженное назначение дополненного дополнения.
[Я проверил переполнение стека для похожих вопросов, но не могу найти ни одного. Так что, если это повторение моих извинений, и, пожалуйста, не могли бы вы связать ответ.]
Например, со строкой регулярное присваивание дает:
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
Заранее спасибо за помощь :)
Этого не существует в 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"
Примечание: это ужасно, пожалуйста, не делайте этого.