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 に答える