我可以创建一个类似于不可变(浮点)的类吗?

时间:2012-07-31 08:38:17

标签: python immutability inheritance

我有一个计算可能会改善的移动平均线的类。平均窗口的大小必须灵活。 它目前的工作原理是设置窗口的大小,然后发送更新:

twoday = MovingAverage(2)    # twoday.value is None
twoday = twoday.update(10)   # twoday.value is None
twoday = twoday.update(20)   # twoday.value == 15
twoday = twoday.update(30)   # twoday.value == 25

我认为如果它更像这样的东西会很酷:

twoday = MovingAverage(2)    # twoday is None
twoday += 10                 # twoday is None
twoday += 20                 # twoday == 15
twoday += 30                 # twoday == 25
这是愚蠢的吗? 有可能吗?

1 个答案:

答案 0 :(得分:6)

您可以emulate numeric types添加__add__()之类的方法,这些方法可以完全符合您的要求。

只需添加

等方法即可
def __iadd__(self, other):
    self.update(other)
    return self

def __add__(self, other):
    return self.value + other

def __str__(self):
    return str(self.value)

你现在拥有的东西。

如果你想接近浮点数的作用,你可以添加诸如

之类的方法
def __float__(self):
    return self.value

def __radd__(self, other):
    return other + self.value

(后者为您提供了somevalue + twoday并获得预期值的方法

__mul__/__rmul__,与div相同,依此类推。您唯一的特例可能是上面提到的__iadd__()