为什么初始化后将重置字符串属性,但不会重置list或dict?

时间:2019-05-17 10:47:14

标签: python constructor properties instance

我知道Python中的类属性将在实例之间共享,但是为什么仅对listdict共享?在下面的示例中,name将被重置,而names不会被重置。

class Test:
    name = None
    names = []

    def __init__(self, name=None):
        if name:
            self.name = name
            self.names.append(name)


t = Test("123")
print(t.name, t.names)

t1 = Test()
print(t1.name, t1.names)

结果是:

123 ['123']
None ['123']

那是为什么?仅共享dictlist

然后如果我将构造函数更改为

def __init__(self, name=None):
    if name:
        self.name = name
        self.names = []

t2结果将为None [],为什么? t2名称上的“无”为何也设置names

以及如何自动重设所有listdict属性,例如使用装饰器。手动重置__init__中的每个按钮都很详细

0 个答案:

没有答案