您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

首先,这没关系:

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

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

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

请注意,两者ab都有共享属性。这通常是不需要的。

当类型可变时,这是定义实例变量认值的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无法更改。我相信,原因主要是散列。

python 2022/1/1 18:37:56 有238人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶