【发布时间】:2021-03-23 05:36:36
【问题描述】:
我已经开始接受主要是数据容器的类的数据类装饰器。我看到的所有教程和示例都是针对相对简单的变量,类型有 int、str、float、list、tuple 或 dict。我对数据类有两个问题:
-
我从未见过数据类中实现了哪些类型的列表。
-
我从未见过如何处理未在数据类中实现的类型的示例。
第二个问题是这篇文章的重点。那么,如果您的数据类具有更复杂的属性(例如,pandas 数据框、函数、用户生成类的实例),是否有方法或最佳实践?我可以想到两个可能的选择:a)在 _post_init_ 中手动处理复杂类型,或者 b)“构建”一个描述参数的类型(我不知道该怎么做,这似乎是可能的)
这大概是我实现选项 a 的方式:
from dataclasses import dataclass
@dataclass
class movie:
release_year: int
title: str
def __post_init__(self, cast_table):
cast_table = cast_table # A dataframe containing cast information
【问题讨论】:
-
cast_table是什么类型?如果它的类型为Foo,您只需将cast_table: Foo添加到您的一系列属性中。:之后的部分必须是一个类型。 -
根据作业中的注释, cast_table 是一个数据框。所以你是说我可以把
cast_table: pd.core.frame.DataFrame放在属性中?嗯,我确定我之前尝试过,但没有成功。 -
即使有自我回答,这个问题对我来说也没有意义。你能澄清一下你到底在问什么吗? “数据类中实现了哪些类型”是什么意思?
dataclass根本不关心其字段的类型,但为dataclasses模块记录的标记除外。dataclass装饰器没有针对任何特定的属性类型实现,它适用于所有这些类型。 -
@MisterMiyagi,是的,这就是我没有明白的重点。我一直在假设装饰器必须为每种类型都有“处理程序”。我只是从未想过它可以通用地处理它们。
标签: python python-typing python-dataclasses