如何在Python中声明实例变量的默认值?

如何在Python中声明实例变量的默认值?,第1张

如何在Python中声明实例变量的默认值?

扩展bp的答案,我想向您展示他所说的不可变类型的含义。

首先,这没关系:

>>> class TestB():...     def __init__(self, attr=1):...         self.attr = attr...     >>> a = TestB()>>> b = TestB()>>> a.attr = 2>>> a.attr2>>> b.attr1

但是,这仅适用于不可变(不变)类型。如果默认值是可变的(意味着可以替换),则将发生这种情况:

>>> class Test():...     def __init__(self, attr=[]):...         self.attr = attr...     >>> a = Test()>>> b = Test()>>> a.attr.append(1)>>> a.attr[1]>>> b.attr[1]>>>

请注意,两者

a
b
都有共享属性。这通常是不需要的。

当类型可变时,这是定义实例变量默认值的Python方法:

>>> class TestC():...     def __init__(self, attr=None):...         if attr is None:...  attr = []...         self.attr = attr...     >>> a = TestC()>>> b = TestC()>>> a.attr.append(1)>>> a.attr[1]>>> b.attr[]

我的第一段代码起作用的原因是,对于不可变的类型,Python会在需要时创建它的新实例。如果需要将1加1,Python会为您创建一个新的2,因为旧的1无法更改。我相信,原因主要是散列。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5654340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存