Python 将dataclass作为默认参数传递
我有一些带有默认值的数据类:Python 将dataclass作为默认参数传递,python,python-dataclasses,Python,Python Dataclasses,我有一些带有默认值的数据类: @dataclasses.dataclass class SomeDataclass: field: str = "" number: int = 3 我有一个函数将其作为参数接收。我想使它能够接收空参数,这将导致它实例化一个默认的数据类。这就是我想要的行为: def func(instance: SomeDataClass = None): # I want to get rid of these lines
@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()):
...
当对函数的每次调用都应该获得自己的、可变值的新实例(如列表
、dict
或集
)时,使用check for-None
习惯用法
否则,否:您需要一个哨兵来指示func
是否应该实例化SomeDataclass
本身。如果函数不修改SomeDataclass
的实例,您可以安全地使用
def func(instance: SomeDataClass = SomeDataclass()):
...
当对函数的每次调用都应该获得自己的、可变值的新实例(如列表
、dict
或集
)时,使用check for-None
习惯用法
否则,否:您需要一个哨兵来指示func
是否应该实例化SomeDataclass
本身。另一个选项是动态定义类并动态实例化它
这里的主要问题是我们定义了两次类
因此,我不认为这是一种方法,直到我们可以有一种方法来定义类只有一次
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)
另一个选项是动态定义类,并动态实例化它
这里的主要问题是我们定义了两次类
因此,我不认为这是一种方法,直到我们可以有一种方法来定义类只有一次
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)
谢谢你的编辑。我想我们应该清理一下评论谢谢你的编辑。我想我们应该整理一下评论这是个大问题。定义一个新类有什么好处?这是一个大问题。定义一个新类有什么好处?