2

我有一门课程可以计算可能会改进的移动平均线。平均窗口的大小必须灵活。它目前通过设置窗口大小然后发送更新来工作:

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

这是愚蠢的吗?是否可以?

4

1 回答 1

6

您可以通过添加诸如 的方法来模拟数字类型__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__()上面提到的。

于 2012-07-31T08:44:13.000 回答