我知道Python中的类属性将在实例之间共享,但是为什么仅对list
和dict
共享?在下面的示例中,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']
那是为什么?仅共享dict
和list
?
然后如果我将构造函数更改为
def __init__(self, name=None):
if name:
self.name = name
self.names = []
t2结果将为None []
,为什么? t2名称上的“无”为何也设置names
?
以及如何自动重设所有list
和dict
属性,例如使用装饰器。手动重置__init__
中的每个按钮都很详细