使用关键字Args在Python中初始化而不在实例之间共享

格雷格书

如何在初始化器中使用关键字args而不在类实例之间共享它?

下面是不良行为的示例,如果我要向集合中添加任何内容,则将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
琼斯·哈珀

请注意,可变的默认参数发生此问题-请参阅“最小惊讶”和可变默认参数要使用可变的默认参数,通常None在函数定义中将default设置为,然后在函数内部检查是否已提供值:

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:)或真实性(if not foo:)进行测试的。例如,如果您想显式传递已引用else的空集,则后者是一个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

除了关键字args外什么都没有初始化python对象

来自分类Dev

如何使用“常规”(关键字)参数或父项实例初始化继承的对象

来自分类Dev

在python中初始化默认关键字参数列表

来自分类Dev

DataTables初始化关键字与官方示例不同

来自分类Dev

DataTables初始化关键字与官方示例不同

来自分类Dev

“ this”关键字在初始化程序块中是什么意思?

来自分类Dev

关键字'this'在静态属性,静态方法或静态字段初始化程序中无效

来自分类Dev

PEP8和使用长关键字参数的对象初始化

来自分类Dev

没有新关键字且使用指针的C ++对象初始化

来自分类Dev

C ++初始化使用“ new”关键字分配的结构的对象成员

来自分类Dev

您如何在堆上初始化线程?(使用“新”关键字)

来自分类Dev

C ++在成员初始化列表中使用'this'关键字

来自分类Dev

何时使用关键字参数进行类初始化?

来自分类Dev

使用内部类中的方法而没有使用new关键字进行对象初始化是否会导致C#Winforms中的内存泄漏

来自分类Dev

如何在不使用C#中的new关键字初始化变量的情况下用值填充数组变量?

来自分类Dev

为什么auto关键字不能与函数指针的初始化列表一起使用?

来自分类Dev

在哪种情况下,您会使用新关键字初始化值类型?

来自分类Dev

如何在Swift中使用保留关键字作为类型名称声明和初始化嵌套枚举?

来自分类Dev

您可以使用类似于Java中python的关键字args的概念来最小化访问器方法的数量吗?

来自分类Dev

在Python中初始化新实例

来自分类Dev

将未初始化的参数传递给方法时的ref关键字

来自分类Dev

带有默认关键字的初始化列表的用法

来自分类Dev

没有关键字“ new”的数组初始化

来自分类Dev

Keras初始化程序错误意外的关键字参数'dtype'

来自分类Dev

无法初始化十六进制数字数组:“关键字未命名类型”

来自分类Dev

Ruby 2.1+关键字参数初始化程序语法

来自分类Dev

带有默认关键字的初始化列表的用法

来自分类Dev

初始化列表中常量变量的“this”关键字

来自分类Dev

使用python查找文件中关键字之间的值

Related 相关文章

  1. 1

    除了关键字args外什么都没有初始化python对象

  2. 2

    如何使用“常规”(关键字)参数或父项实例初始化继承的对象

  3. 3

    在python中初始化默认关键字参数列表

  4. 4

    DataTables初始化关键字与官方示例不同

  5. 5

    DataTables初始化关键字与官方示例不同

  6. 6

    “ this”关键字在初始化程序块中是什么意思?

  7. 7

    关键字'this'在静态属性,静态方法或静态字段初始化程序中无效

  8. 8

    PEP8和使用长关键字参数的对象初始化

  9. 9

    没有新关键字且使用指针的C ++对象初始化

  10. 10

    C ++初始化使用“ new”关键字分配的结构的对象成员

  11. 11

    您如何在堆上初始化线程?(使用“新”关键字)

  12. 12

    C ++在成员初始化列表中使用'this'关键字

  13. 13

    何时使用关键字参数进行类初始化?

  14. 14

    使用内部类中的方法而没有使用new关键字进行对象初始化是否会导致C#Winforms中的内存泄漏

  15. 15

    如何在不使用C#中的new关键字初始化变量的情况下用值填充数组变量?

  16. 16

    为什么auto关键字不能与函数指针的初始化列表一起使用?

  17. 17

    在哪种情况下,您会使用新关键字初始化值类型?

  18. 18

    如何在Swift中使用保留关键字作为类型名称声明和初始化嵌套枚举?

  19. 19

    您可以使用类似于Java中python的关键字args的概念来最小化访问器方法的数量吗?

  20. 20

    在Python中初始化新实例

  21. 21

    将未初始化的参数传递给方法时的ref关键字

  22. 22

    带有默认关键字的初始化列表的用法

  23. 23

    没有关键字“ new”的数组初始化

  24. 24

    Keras初始化程序错误意外的关键字参数'dtype'

  25. 25

    无法初始化十六进制数字数组:“关键字未命名类型”

  26. 26

    Ruby 2.1+关键字参数初始化程序语法

  27. 27

    带有默认关键字的初始化列表的用法

  28. 28

    初始化列表中常量变量的“this”关键字

  29. 29

    使用python查找文件中关键字之间的值

热门标签

归档