首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成从python中类型通知的dataclass对象派生的类工厂。

生成从python中类型通知的dataclass对象派生的类工厂。
EN

Stack Overflow用户
提问于 2022-08-08 19:31:16
回答 3查看 76关注 0票数 2

当使用dataclasses.dataclass时,类型信息通知如何解析参数。我希望使用定义的dataclass并生成一个类,将所有属性类型声明从X更改为Optional[List[X]]

代码语言:javascript
运行
复制
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生成一个类似于下面定义的类。

代码语言:javascript
运行
复制
@dataclass
class SrcClassLister(DataClassJsonMixin):
    numbers: Optional[List[int]]
    names: Optional[List[str]]
    ats: Optional[List[datetime]]

我不确定dataclass是如何捕获类型信息以进行解析的。

我这样做的原因是我有大量的数据集定义,我想自动制定一个过滤规范。此规范将接受一个可接受的值列表,用于传递筛选器。

EN

Stack Overflow用户

回答已采纳

发布于 2022-08-08 19:42:26

我可以想象一下

代码语言:javascript
运行
复制
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())

对你有用-这个打印出来

代码语言:javascript
运行
复制
SrcClassLister(numbers=[1, 2], names=None, ats=None, purposes=None)
{"numbers": [1, 2], "names": null, "ats": null, "purposes": null}
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73283104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档