传递数据类作为默认参数

问题描述

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

@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()):
    ...

每次调用该函数都应获得自己的 mutable 值的新实例(例如None,{ {1}}或list)。

否则,否:您需要一个哨兵来指示dict是否应该实例化set本身。

,

另一种选择是即时定义类,并即时实例化该类。

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

因此,在我们只能定义一次类之前,我不认为这是可行的方法。

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)