使__add__返回算术平均值

时间:2017-12-02 20:31:43

标签: python

我希望我的对象Foo的添加方法返回平均求和。对于两个对象的总和,它很简单:

class Foo():
    def __init__(self, n):
        self.n = n

    def __add__(self, other):
        return Foo((self.n + other.n)/2)

如何为N>2个对象执行此操作?例如。 Foo(0) + Foo(1) + Foo(2) + Foo(3)应该返回Foo((0 + 1 + 2 + 3)/4),即Foo(1.5)

========================================

修改:这是我的解决方案

class Foo():    
    def __init__(self, n):
        self.n = n
        self._n = n
        self._count = 1

    def __add__(self, other):
        out = Foo(self._n + other._n)
        out._count = self._count + other._count
        out.n = out.n/out._count
        return out

不是获得算术平均值的最佳方法,但我需要以这种方式完成。此外,这演示了如何对用户定义的对象进行特殊添加,这些对象返回对象总和的函数。例如。 make __add__返回对象总和的平方根:

class Bar():
    def __init__(self, n):
        self.n = n
        self._n = n

    def __add__(self, other):
        out = Bar(self._n + other._n)
        out.n = (out.n)**0.5
        return out

1 个答案:

答案 0 :(得分:2)

一种解决方案可能是在类中存储两个数字:平均值和样本数:

class Foo:
    def __init__(self, avg, count=1):
        self.avg = avg
        self.count = count

    def __add__(self, other):
        return Foo((self.avg*self.count + other.avg*other.count)
                                        /
                            (self.count + other.count),
                   self.count + other.count)

更好的只是存储总和并仅在请求时计算平均值。