我希望我的对象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
答案 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)
更好的只是存储总和并仅在请求时计算平均值。