Python 我该怎么做;x+;=5“;(使用x自定义类)添加到x的属性?

Python 我该怎么做;x+;=5“;(使用x自定义类)添加到x的属性?,python,python-2.7,oop,Python,Python 2.7,Oop,我有一门课是这样的: class C(object): a = 5 def __iadd__(self, other): self.a += other 我希望能够做到以下几点: b = C() b += 7 b是一样的,但是b.a中增加了7。但是,如果我真的运行这个,它会把b变成一个非类型的对象。我想这是因为C.uu iadd_uuu没有返回任何东西 我是否需要制作C.u iadd_uu_u_u_u_u_u_u_u_u_u_u_u___u__________

我有一门课是这样的:

class C(object):
    a = 5
    def __iadd__(self, other):
        self.a += other
我希望能够做到以下几点:

b = C()
b += 7
b是一样的,但是b.a中增加了7。但是,如果我真的运行这个,它会把b变成一个非类型的对象。我想这是因为C.uu iadd_uuu没有返回任何东西


我是否需要制作C.u iadd_uu_u_u_u_u_u_u_u_u_u_u_u___u____________?有没有一种方法可以在不复制整个对象并返回该对象的情况下实现这种添加?

您忘记了从
\uu iadd\uu
方法返回
self

def __iadd__(self, other):
    self.a += other
    return self
从:

这些方法应该尝试就地执行操作(修改self)并返回结果(可能是,但不一定是self)


如果没有明确的返回语句,函数默认返回
None
,因此
b+=7
产生
None
,这是赋值的结果。

您忘记了从
方法返回
self

def __iadd__(self, other):
    self.a += other
    return self
从:

这些方法应该尝试就地执行操作(修改self)并返回结果(可能是,但不一定是self)

如果没有显式的return语句,函数默认返回
None
,因此
b+=7
生成
None
,这是赋值的结果。

“使用增量值调用
\u iadd\u()
特殊方法,并应使用适当修改的值返回新实例”用增量的值调用
\uuuu iadd\uuu()
特殊方法,并应返回一个具有适当修改值的新实例