问题描述
@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)