python创建任意类型的空对象?

时间:2015-06-11 13:55:22

标签: python abaqus

对于像list这样的类型我可以很容易地创建一个空列表来使这个构造工作:

 s = []
 s+= [1,2,3]  # result s assigned [1,2,3]

在这样的结构中显然很有用:

 s=[]
 for v in (list1,list2,list3..):
   if condition : s+=v

现在我正在使用用户定义的类型,在我无法阅读或更改的模块中定义 ..我必须这样做:

 s=0
 for v in (typefoo1,typefoo2,..):
   if condition :
    if s==0 :
     s=v
    else:
     s+=v

这很有效,但很难看,而且经常发生这很烦人。 所以..有没有办法创建一个空对象,这样+=运算符的行为就像常规赋值=一样,无论r.h.s上的类型如何?

编辑: 我试图故意保留问题的通用性,但为了完整性,所讨论的类型是Abaqus几何序列。

2 个答案:

答案 0 :(得分:2)

  

有没有办法创建一个空对象,这样+=运算符的行为就像常规赋值=一样,无论r.h.s上的类型如何?

不确定。只需编写一个类并定义您的__add__方法即可返回未经修改的RHS。

class DummyItem:
    def __add__(self, other):
        return other

s = DummyItem()
s += 23
print s

结果:

23

答案 1 :(得分:1)

假设你的列表至少有一个元素,你可以创建一个迭代器并使用Polygon来获取第一个元素,然后将其余元素相加:

Coordinates

您也可以使用sum函数执行此操作,第二个参数指定初始值:next。这显式不适用于字符串,但您也可以以类似的方式使用i = iter(lst) s = next(i) for x in i: s += x 使用字符串:s = sum(i, next(i))。或者,您甚至可以将其与@Kevin's answer中的reduce组合为s = reduce(operator.add, i, next(i))。这样它也适用于字符串,您可以直接使用列表,而不需要创建迭代器。