Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在两个python类实例之间执行求和,并获得每个实例变量的长度列表_Python_Sum_Add - Fatal编程技术网

如何在两个python类实例之间执行求和,并获得每个实例变量的长度列表

如何在两个python类实例之间执行求和,并获得每个实例变量的长度列表,python,sum,add,Python,Sum,Add,这是我的问题 我必须对类Foo的两个实例求和。该类接受实例变量bar作为list。我的目标是在加法过程中,除了求和(在列表意义上)之外,还要计算另一个包含每个实例.bar长度的列表。 当然,我到目前为止所取得的成就并不适用于涉及两个以上附录的总和,因为它总是提供一个长度为2的列表 非常感谢您的帮助 这是到目前为止我的代码 class Foo(): 定义初始化(自我,条形图:列表): 如果存在(条形图、列表): self.bar=bar 其他: raise TypeError(f“{bar}不是列

这是我的问题

我必须对类
Foo
的两个实例求和。该类接受实例变量
bar
作为
list
。我的目标是在加法过程中,除了求和(在
列表
意义上)之外,还要计算另一个包含每个
实例.bar
长度的列表。 当然,我到目前为止所取得的成就并不适用于涉及两个以上附录的总和,因为它总是提供一个长度为2的列表

非常感谢您的帮助

这是到目前为止我的代码

class Foo():
定义初始化(自我,条形图:列表):
如果存在(条形图、列表):
self.bar=bar
其他:
raise TypeError(f“{bar}不是列表”)
定义添加(自身、其他):
如果存在(其他,Foo):
添加了_bar=self.bar+other.bar
添加了\u foo=foo(添加了\u条)
其他:
raise TypeError(f“{other}不是'Foo'的实例)
添加了_foo.len_bar=[len(self.bar)]+[len(other.bar)]
返回已添加的\u foo
定义(自身、其他):
如果其他==0:
回归自我
其他:
返回自我。添加(其他)
a=Foo([1,2,3])
b=Foo([4,5])
c=Foo([7,8,9,“a”])
r=a+b+c
print(r.len_bar)#prints[5,4],有没有办法得到[3,2,4]?

听起来,如果之前未包含长度,则希望将其包含在add中;如果之前已包含长度,则希望将之前的长度列表包含在add中。我更新了代码

class Foo():

    def __init__(self, bar: list):
        if isinstance(bar, list):
            self.bar = bar
        else:
            raise TypeError(f"{bar} is not a list")  

    def __add__(self, other):
        if isinstance(other, Foo):
            added_bar = self.bar + other.bar
            added_foo = Foo(added_bar)
        else:
            raise TypeError(f"{other} is not an instance of 'Foo'")
        self_len_bars      = self.len_bars  if hasattr(self,'len_bars')  else [len(self.bar)]
        other_len_bars     = other.len_bars if hasattr(other,'len_bars') else [len(other.bar)]
        added_foo.len_bars = self_len_bars + other_len_bars
        return added_foo

    def __radd__(self, other):
        if other == 0:
            return self
        else:
            return self.__add__(other)

a = Foo([1, 2, 3])
b = Foo([4, 5])
c = Foo([7, 8, 9, "a"])

r = a+b+c
print(r.len_bars)

您是如何得到结果的?对不起,我不理解您的问题,为什么只有一些
Foo
实例具有
len\u bar
属性?为什么不在构造函数中设置?基本上,加法是如何工作的?你不能只说“结果在这里”,然后期望我们知道你在说什么。因为我只需要在汇总的实例中使用
len_bar
,以执行下一个任务。另外,如果实例具有attr
len_条
我会立即将该实例识别为求和的结果