如果我更改类成员值,则打印类实例会导致无

时间:2017-11-24 16:34:57

标签: python python-3.x

我遇到了一个我无法解释的问题:

class A:
    def __init__(self, rid, title):
        self.rid = rid
        self.title = title
        self.b = []

    def __add__(self, other):
        if type(other) == B:
            self.b += [other]

    def __str__(self):
        return self.rid + ' - ' + self.title

    def __repr__(self):
        return str(self)

class B:
    def __init__(self, rid, title):
        self.rid = rid
        self.title = title

b = B('123', 'abc')
a = A('345', 'cde')

print(a)

a += b

print(a)

第一次打印产生预期的输出:

345 - cde

然而,第二次打印(在添加b之后)导致:

None

为什么?我没有更改a的删除或标题,也没有创建名为a的新的未初始化实例,或者我是?

1 个答案:

答案 0 :(得分:2)

表达式a += b是:a = a.__add__(b)

的简写

当您的__add__()方法返回None时,这意味着您会将None分配给a