我有一个计算可能会改善的移动平均线的类。平均窗口的大小必须灵活。 它目前的工作原理是设置窗口的大小,然后发送更新:
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
这是愚蠢的吗?
有可能吗?
答案 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__()
。