Отражается ли дополненное дополнение (__iadd__) в Python?

#python #reverse #addition #augmented-assignment

#python #обратный #добавление #дополненное назначение

Вопрос:

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

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

Например, при обычном присваивании строки:

 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:

Этого не существует в 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"
 

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

Комментарии:

1. Жаль, что это не реализовано в языке, и спасибо за «взлом»! Почему это считается ужасным?

2. Это ужасно, потому что это неожиданно. В python правило состоит в том, чтобы предпочесть один способ сделать что-то, и это должно быть очевидно. Если у вас есть веская причина предпочесть этот подход, или это для личного проекта, над которым никто больше не будет работать, это одно, но если это общая кодовая база, тогда важно учитывать влияние удобочитаемости на то, что вы получаете от этой «функции».

3. Да, это имеет смысл, я не думал о других, так как это если для личного проекта (к лучшему, так как я уверен, что другие возненавидят мою практику кода ахах). Спасибо!