我只想使用__add__
修饰符,使用'+ ='轻松添加到类实例的元素:
class Problem:
def __init__(self):
self.lItems = []
def __add__(self, other):
self.lItems.append(other)
problem = Problem()
problem += 'text'
print(problem)
None
之后产生的问题将等于+=
。为什么?我怎样才能防止这种情况发生?
P.S。:我也试过实施__iadd__
而没有效果......
答案 0 :(得分:4)
您需要从__add__
:
class Problem:
def __init__(self):
self.lItems = []
def __add__(self, other):
self.lItems.append(other)
return self
但是,现在使用+时遇到问题:
a = Problem()
b = a + 5
print (a)
print (b)
结果:
<__main__.Problem instance at 0x0022BE40>
<__main__.Problem instance at 0x0022BE40>
a
和b
是同一个实例!我们希望b
与a
不同,在其lItems中有一个额外的对象。
这就是您要使用__iadd__
方法的原因。它仅适用于+=
:
class Problem:
def __init__(self):
self.lItems = []
def __iadd__(self, other):
self.lItems.append(other)
return self
...并且使用+导致错误,应该如此。
答案 1 :(得分:0)
在append
操作后,您需要return
该对象。
class Problem:
def __init__(self):
self.lItems = []
def __iadd__(self, other):
self.lItems.append(other)
return self
实施例
>>> problem = Problem()
>>> problem += 'text'
>>> problem.lItems
['text']
>>> problem += 'foobar'
>>> problem.lItems
['text', 'foobar']
答案 2 :(得分:-2)
只需要在添加方法中返回一些内容,我认为这就是你想要的:
class Problem:
def __init__(self):
self.lItems = []
def __add__(self, other):
self.lItems.append(other)
return self
problem = Problem()
problem += 'text'
print(problem)
print(problem.lItems)
输出:
<__main__.Problem object at 0x04BBDCD0>
['text']