【问题标题】:Is Reflected Augmented Addition (__iadd__) in Python?Python中的反射增广加法(__iadd__)?
【发布时间】:2019-09-06 21:07:08
【问题描述】:

对于“更好”的更简单的代码,我想知道是否可以执行保留/反射的增强加法分配。

[我已经检查过 Stack Overflow 是否有类似问题,但找不到任何问题。因此,如果这是重复我的道歉,请您链接答案。]

例如用一个字符串正则赋值给出:

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 reverse addition augmented-assignment


【解决方案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"

注意:这很糟糕 ^ ,请不要这样做。

【讨论】:

  • 很遗憾这没有在语言中实现,感谢您的“hack”!为什么这被认为是可怕的?
  • 这很糟糕,因为它出乎意料。使用 python,规则是更喜欢一种做某事的方式,并且那件事应该是显而易见的。如果您有充分的理由更喜欢这种方法,或者它是用于其他人不会从事的个人项目,那是一回事,但如果它是一个共享代码库,那么考虑可读性与您从中获得的影响是很重要的“功能”。
  • 是的,这是有道理的,我没有考虑过其他人,因为这是个人项目(最好的,因为我确信其他人会讨厌我的代码实践啊哈)。谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多