当使用dataclasses.dataclass
时,类型信息通知如何解析参数。我希望使用定义的dataclass
并生成一个类,将所有属性类型声明从X
更改为Optional[List[X]]
。
from dataclasses import dataclass
from dataclasses_json import DataClassJsonMixin
from datetime import datetime
@dataclass
class SrcClass(DataClassJsonMixin):
number: int
name: str
at: datetime
SrcClassLister = make_lister(SrcClass)
我希望函数make_lister
生成一个类似于下面定义的类。
@dataclass
class SrcClassLister(DataClassJsonMixin):
numbers: Optional[List[int]]
names: Optional[List[str]]
ats: Optional[List[datetime]]
我不确定dataclass
是如何捕获类型信息以进行解析的。
我这样做的原因是我有大量的数据集定义,我想自动制定一个过滤规范。此规范将接受一个可接受的值列表,用于传递筛选器。
发布于 2022-08-08 19:42:26
我可以想象一下
import dataclasses
import typing
from dataclasses import dataclass
from dataclasses_json import DataClassJsonMixin
from datetime import datetime
@dataclass
class SrcClass(DataClassJsonMixin):
number: int
name: str
at: datetime
purpose: int = 42
def pluralize(name):
# TODO: improve this if you will
return name + "s"
def make_lister(src_cls):
fields = [
(pluralize(field.name), typing.Optional[typing.List[field.type]], dataclasses.field(default=None))
for field in dataclasses.fields(src_cls)
]
name = f"{src_cls.__name__}Lister"
return dataclasses.make_dataclass(name, fields, bases=(DataClassJsonMixin,))
SrcClassLister = make_lister(SrcClass)
scl = SrcClassLister(numbers=[1, 2])
print(scl)
print(scl.to_json())
对你有用-这个打印出来
SrcClassLister(numbers=[1, 2], names=None, ats=None, purposes=None)
{"numbers": [1, 2], "names": null, "ats": null, "purposes": null}
https://stackoverflow.com/questions/73283104
复制相似问题