如何正确地对类实例执行算术?例如。求和House类实例列表的n_people属性

问题描述 投票:1回答:1

如何正确地对类实例执行算术?在下面的示例中,类表示House并包含表示该房屋中人数的n_people属性。

目标是对House类实例执行求和并返回房屋中的总人数。当House类实例加在一起时,这似乎有效:

class House:

    def __init__(self, n_people):
        self.n_people = n_people

    def __add__(self, n_people):
        return n_people + self.n_people

House(3) + House(4)

在汇总House类实例数组时失败:

houses = [House(i) for i in range(10)]
sum(houses)

产生的错误是:

TypeError                                 Traceback (most recent call last)
<ipython-input-66-197f26932b89> in <module>
      1 houses = [House(i) for i in range(10)]
----> 2 sum(houses)

TypeError: unsupported operand type(s) for +: 'int' and 'House'

在Python中对类实例执行算术的正确方法是什么?

python python-3.x class instance-variables
1个回答
2
投票

你面临的问题是sum从左到右工作,所以在前两个House实例相加后,你的代码试图执行int + House,只定义了House + int

要解决这个问题,您需要定义__radd__,在这种情况下调用它:

class House:

    def __init__(self, n_people):
        self.n_people = n_people

    def __add__(self, n_people):
        return n_people + self.n_people

    def __radd__(self, n_people):
        return n_people + self.n_people

House(3) + House(4)
houses = [House(i) for i in range(10)]
sum(houses)

输出:

45
© www.soinside.com 2019 - 2024. All rights reserved.