将数据类作为默认参数传递
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 值的新实例(如list
、dict
或 set
).
否则,不:你需要一个哨兵来指示 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)
我有一些具有默认值的数据类:
@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 值的新实例(如list
、dict
或 set
).
否则,不:你需要一个哨兵来指示 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)