在dataclass中,我们可以使用default_factory参数为属性设置一个默认值。这个默认值是一个带有callable特性的函数或类方法。当我们创建实例时,如果没有指定这个属性的值,那么默认会调用default_factory来生成一个默认值。 default_factory的用法 首先,我们需要导入dataclass装饰器和field函数: fromdataclassesimportdataclass,f...
from dataclasses import dataclass, field, asdict, replace @dataclass(frozen=True) # 创建不可变类 class Point: x: float y: float # 使用field自定义字段属性 coordinates: tuple = field(default_factory=tuple, repr=False) # 不可变对象 p1 = Point(3, 4) p11 = Point(3, 4, (4,)) print(...
对于可变类型(如列表或字典)的默认值,应该使用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.append("it...
我们可以使用dataclasses.field来定制化dataclass字段的行为以及它们在dataclass的影响。 仍然是上述的使用情形,让我们从__post_init__里去除get_random_marks的调用。以下是使用dataclasses.field的情形: dataclasses.field接受了一个名为default_factory的参数,它的作用是:如果在创建对象时没有赋值,则使用该方法初始化...
在dataclass中,我们可以使用default_factory参数来定义类的默认值。default_factory参数是一个函数,用于创建对象时,如果对象没有被创建,则返回该类的默认值。 from dataclasses import dataclass, field @dataclass class Person: name: str = field(default_factory=str) ...
from dataclasses import field @dataclass class Config: log_level: str = 'INFO' cache_size: int = field(default=1024, metadata={'unit': 'KB'}) config = Config() # 使用默认值初始化 print(config.cache_size) # 输出: 10241.3 相等性比较与哈希支持 ...
dataclasses.field(*, default=MISSING, default_factory=MISSING, repr=True, hash=None, init=True, compare=True, metadata=None): default:如果提供,这将是该字段的默认值。 default_factory:用于指定具有可变默认值的字段,必须是一个无参可调用对象;与default互斥(不可同时指定)。
要使用default_factory字段,我们需要导入dataclasses模块。dataclasses模块是一个Python标准库中的模块,它提供了一种简化类定义的方法。 下面是一个使用default_factory字段的示例: fromdataclassesimportdataclass,fieldfromtypingimportList@dataclassclassPerson:name:strage:inthobbies:List[str]=field(default_factory=list...
from dataclasses import dataclass @dataclass class Position: name: str lon: float lat: float 可以发现,主要起作用的是装饰符@dataclass ,需要注意,如果想要使用dataclass,需要Python 3.7或更高版本 使用dataclass的好处是可以节省书写__init()__等一些常用的实例方法 ...
一旦我们定义了一个数据类,我们就可以利用dataclasses包中的一些工具。因此,我们需要导入它,并可能为方便起见给它一个别名。 将数据类导入为 dc fields()然后,我们可以使用该方法检索已定义数据类的字段。不仅是类定义,而且它也适用于实例。 dc.fields(Person) ...