gpt4 book ai didi

python - 对对象属性列表求和

转载 作者:行者123 更新时间:2023-11-28 22:43:05 25 4
gpt4 key购买 nike

我有一个类定义为

class MyClass(object):

def __init__(self, value=0):
self.value = value

def __add__(self,other):
return MyClass(self.value + other.value)

__radd__ = __add__

我想像这样简单地对它们应用 sum 函数:

a=MyClass(value=1)
b=MyClass(value=2)

c=[a,b]
print sum(c) # should return a MyClass instance with value 3

正如 this post 中所建议的那样.但是,出现异常:

     15 
16 c=[a,b]
---> 17 print sum(c)

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

我不明白为什么sum函数要加两个不同的类型。

最佳答案

sum需要某个地方开始;默认情况下,它从 0 开始。所以它尝试的第一个操作是 0 + MyClass(value=1),您还没有告诉它该怎么做!

因此,您有两个选择:

  1. 指定开始(例如sum(c, MyClass()));或
  2. 告诉 MyClass 如何处理将整数添加到实例。

后者可能看起来像:

class MyClass(object):

...

def __add__(self, other):
try:
return MyClass(self.value + other.value) # handle things with value attributes
except AttributeError:
return MyClass(self.value + other) # but also things without

...

它可以让你跳过显式的 start:

>>> sum([MyClass(1), MyClass(2)]).value
3

关于python - 对对象属性列表求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157851/

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