将数据类作为默认参数传递

passing dataclass as default parameter

我有一些具有默认值的数据类:

@dataclasses.dataclass
class SomeDataclass:
    field: str = ""
    number: int = 3

我有一个函数接收它作为参数。我想让它能够接收空参数,这将导致它实例化一个默认数据类。这是我想要的行为:

def func(instance: SomeDataClass = None):
    # I want to get rid of these lines
    if instance is None:
        instance = SomeDataClass()

如果不明确地这样做,是否有可能以某种方式实现?

如果函数不会修改SomeDataclass的实例,可以放心使用

def func(instance: SomeDataClass = SomeDataclass()):
    ...

check-for-None 惯用语用于每次调用函数时都应获得自己的 mutable 值的新实例(如listdictset).

否则,不:你需要一个哨兵来指示 func 是否应该实例化 SomeDataclass 本身。

另一种选择是即时定义 class 并即时实例化它。

这里的主要问题是我们定义了两次class。

所以我不认为这是可行的方法,直到我们有办法只定义一次 class。

from dataclasses import dataclass,field
import dataclasses

@dataclass
class SomeDataClass:
    f: str = 'jack'
    number: int = 12
                   

def foo(data=dataclasses.make_dataclass('SomeDataClass',[('f',str,field(default='jack')),('number', int,field(default=12))])()):
  print(data)

foo()
foo(SomeDataClass('jim',33))

输出

SomeDataClass(f='jack', number=12)
SomeDataClass(f='jim', number=33)