使用default_factory创建可变的默认值 default_factory参数不仅可以用于不可变类型,还可以用于可变类型。我们可以使用default_factory来设置一个可变对象作为属性的默认值。 让我们继续使用上面的Student类,并定义一个grades属性的default_factory为list。这样,我们就可以通过调用student.grades.append来向grades属性添加新的成绩...
hobbies: list = field(default_factory=list) # 使用工厂函数来生成默认值上面代码中的 hobbies 属性使用了 default_factory 来指定默认值为空列表。这样做是为了避免多个实例共享同一个列表对象的问题。3. 可变参数的 fielddataclass 中的field 还可以设置其他选项,比如设置某个属性不参与比较或排除在初始化之外。
可变默认值 对于可变类型(如列表或字典)的默认值,应该使用field函数和default_factory参数,以避免共享可变默认值带来的问题。 from dataclasses import dataclass, field from typing import List @dataclass class Inventory: items: List[str] = field(default_factory=list) inventory = Inventory() inventory.items...
其中default是field的默认值,而default_factory控制如何产生值,它接收一个无参数或者全是默认参数的callable对象,然后用调用这个对象获得field的初始值,之后再将default(如果值不是MISSING)复制给callable返回的这个对象。 举个例子,对于list,当复制它时只是复制了一份引用,所以像dataclass里那样直接复制给实例的做法的危险...
class C: mylist: List[int] = field(default_factory=list) c = C() c.mylist += [1, 2, 3]此外,dataclasses 模块还提供了很多有用的函数,可以将 dataclass 转换成 tuple、dict 等形式。话说我自己重复过很多这样的方法了……1 2 3 4 5 6 7 8 9 10 11 12 13 14 @dataclass class Point...
id: int = field(init=False, default_factory=lambda: id(self)) # 不参与初始化,但参与比较 p1 = Person('Alice', 30) p2 = Person('Bob', 25) print(p1 < p2) # 比较基于name,不考虑age 通过上述介绍,我们深入学习了如何利用field函数来定制dataclass字段的属性 ,从而满足更加复杂和多样化的编程需求...
children2: dict = dataclasses.field(default_factory=lambda: {"name":"喵"}) """field init 参数""" @dataclasses.dataclass class Cat: name: str color: str weight: str = dataclasses.field(default=5) children: list = dataclasses.field(default_factory=list,init=False) ...
可变参数需要通过default_factory来指定类型或者默认值 field常用参数 default: 字段的默认值 ** aa : str = dataclasses.field(default=4) # 指定默认值为4 default_factory: 定义可变量参数的默认值,不能与 default 同时存在 ** children : list = dataclasses.field(default_factory =list) # 指定默认值的...
color : str = field(default_factory=list) >> bmw = Car("bmw", 500000, "red") >> print(bmw) bmw, red 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. compare和hash参数表示field是否参与比较和计算hash值。 metadata不被dataclass自身使用,通常让第三方组件从中获取某些元信息时才使用,所以我们不...
其中default是field的默认值,而default_factory控制如何产生值,它接收一个无参数或者全是默认参数的callable对象,然后用调用这个对象获得field的初始值,之后再将default(如果值不是MISSING)复制给callable返回的这个对象。 举个例子,对于list,当复制它时只是复制了一份引用,所以像dataclass里那样直接复制给实例的做法的...