gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:03:16 24 4
gpt4 key购买 nike

如何在类实例上正确执行算术?在下面的示例中,该类表示一个 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 中对类实例执行算术的正确方法是什么?

最佳答案

您面临的问题是 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

关于python - 如何在类实例上正确执行算术?例如。对 House 类实例列表的 n_people 属性求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com