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

1

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

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

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

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

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

  • 4
    Нет, этого не существует.
Теги:
addition
reverse
augmented-assignment

1 ответ

0

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

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

  • 0
    Жаль, что это не реализовано в языке, и спасибо за взлом! Почему это считается ужасным?
  • 1
    Это ужасно, потому что это неожиданно. В Python правило состоит в том, чтобы предпочитать один способ что-то делать, и это должно быть очевидно. Если у вас есть веская причина предпочесть такой подход, или он предназначен для личного проекта, над которым больше никто не будет работать, это одно, но если это общая кодовая база, то важно учитывать влияние читабельности на то, что вы получаете от этого » характерная черта".
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню