如何在 classes 实例上正确执行算术运算?例如。将 n_people 属性求和以获得 House class 实例列表
How to correctly perform arithmetic on classes instances? E.g. Sum the n_people attribute for a list of House class instances
如何在 classes 实例上正确执行算术运算?在下面的示例中,class 表示 House
并包含一个 n_people
属性,表示该房屋中的人数。
objective 是对 House
class 个实例和 return 房屋中的总人数进行求和。当 House
class 个实例加在一起时,这似乎有效:
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
class 个实例的数组求和时失败:
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 中的 class 个实例执行算术运算的正确方法是什么?
您面临的问题是 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
如何在 classes 实例上正确执行算术运算?在下面的示例中,class 表示 House
并包含一个 n_people
属性,表示该房屋中的人数。
objective 是对 House
class 个实例和 return 房屋中的总人数进行求和。当 House
class 个实例加在一起时,这似乎有效:
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
class 个实例的数组求和时失败:
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 中的 class 个实例执行算术运算的正确方法是什么?
您面临的问题是 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