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

2024-10-03 02:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

对于list之类的类型,我可以很容易地创建一个空列表来使这个构造生效:

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

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

^{pr2}$

现在我正在处理一个用户定义的类型,它是在一个模块中定义的,我无法读取或更改。。我必须这样做:

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

这很管用,但很难看,而且经常发生,这很烦人。 所以。。有没有一种方法可以创建一个空对象,使得+=运算符的行为与常规赋值=相似,而不考虑r.h.s上的类型?在

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


Tags: 模块用户in类型列表forif定义
2条回答

is there a way to create an empty object such that the += operator would behave simply like a regular assignment = regardless of the type on the r.h.s?

当然可以。只需编写一个类并定义您的__add__方法以返回未修改的RHS。在

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

s = DummyItem()
s += 23
print s

结果:

^{pr2}$

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

i = iter(lst)
s = next(i)
for x in i:
    s += x

您也可以使用^{}函数来完成此操作,并使用第二个参数指定初始值:s = sum(i, next(i))。这显式地不适用于字符串,但您也可以以类似的方式使用reduce,这样处理字符串:s = reduce(operator.add, i, next(i))。或者,您甚至可以将其与来自@Kevin's answerDummyItem结合起来,作为s = sum(lst, DummyItem())。这样它也可以处理字符串,并且可以直接使用列表,而不需要创建迭代器。在

相关问题 更多 >