使用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是如何捕获类型信息以进行解析的.

我这样做的原因是我有各种各样的数据类定义,并且我想自动制定一个过滤规范.此规范将采用一系列可接受的值作为通过过滤器的参数.

推荐答案

我会想像这样的事情

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}

Python相关问答推荐

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

运行总计基于多列pandas的分组和总和

优化pytorch函数以消除for循环

如何获取numpy数组的特定索引值?

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

在含噪声的3D点网格中识别4连通点模式

使用Python和文件进行模糊输出

如何从列表框中 Select 而不出错?

如何排除prefecture_related中查询集为空的实例?

人口全部乱序 - Python—Matplotlib—映射

用SymPy在Python中求解指数函数

将CSS链接到HTML文件的问题

提取数组每行的非零元素

如何在验证文本列表时使正则表达式无序?

比较两个有条件的数据帧并删除所有不合格的数据帧

分解polars DataFrame列而不重复其他列值

如何从一个维基页面中抓取和存储多个表格?

对当前的鼹鼠进行编码,并且我的按键获得了注册

将多行数据循环到嵌套框架中的单行

大Pandas 每月重新抽样200万只和300万只