gpt4 book ai didi

python - 使用关键字参数在 Python 中初始化,无需在实例之间共享

转载 作者:行者123 更新时间:2023-11-30 23:14:35 25 4
gpt4 key购买 nike

如何在初始化程序中使用关键字参数而不在类的实例之间共享它?

下面的不良行为示例,如果我要向集合 foo 添加任何内容,那么它将在两个实例中添加。

In [1]: class Klass:
def __init__(self, foo=set()):
self.foo = foo
In [2]: a = Klass()
In [3]: b = Klass()
In [4]: a.foo is b.foo
Out[4]: True

最佳答案

请注意,此问题发生在可变默认参数的情况下 - 请参阅 "Least Astonishment" and the Mutable Default Argument 。要使用可变默认参数,通常在函数定义中将默认值设置为 None,然后检查函数内部是否已提供值:

class Klass:

def __init__(self, foo=None):
if foo is None:
foo = set()
self.foo = foo

或者:

self.foo = foo if foo is not None else set()

请注意,None 通过身份测试(if foo is None:),而不是相等性测试(if foo == None:)或真实性(如果不是 foo:)。例如,如果您想显式传入您在其他地方引用的空集,则后者就是一个问题。

关于python - 使用关键字参数在 Python 中初始化,无需在实例之间共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com