Python 数据类:如果 __post_init__ 执行类型转换,则使用什么类型?

2024-03-09

我有一个 Python 类,其中有一个可以传递多种序列类型之一的字段。为了简化,我将坚持使用元组和列表。__init__将参数转换为MyList.

from typing import Union
from dataclasses import dataclass, InitVar, field

class MyList(list):
    pass

@dataclass
class Struct:
    field: Union[tuple, list, MyList]

    def __post_init__(self):
        self.field = MyList(self.field)

我应该使用什么类型的field宣言?

  • 如果我提供所有可能的输入类型的并集,则代码不会记录这一点field总是一个MyList when accessed.
  • 如果我只提供最终的MyList类型,当我通过时 PyCharm 会抱怨Struct() a list.

我可以改为使用:

_field: InitVar[Union[tuple, list, MyList]] = None
field: MyList = field(init=False)

def __post_init__(self, _field):
    self.field = MyList(_field)

但这非常难看,尤其是在 3 个字段中重复时。另外我必须构建一个类似的结构Struct(_field=field)代替Struct(field=field).

2018年4月,“tm”在PyCharm的公告上评论了这个问题:https://blog.jetbrains.com/pycharm/2018/04/python-37-introducing-data-class/#comment-323957 https://blog.jetbrains.com/pycharm/2018/04/python-37-introducing-data-class/#comment-323957


您将向属性赋值与代码混为一谈produces要分配给属性的值。我将使用一个单独的类方法来将两段代码分开。

from dataclasses import dataclass


class MyList(list):
    pass


@dataclass
class Struct:
    field: MyList

    @classmethod
    def from_iterable(cls, x):
        return cls(MyList(x))


s1 = Struct(MyList([1,2,3]))
s2 = Struct.from_iterable((4,5,6))

现在轮到你only传递现有值MyList to Struct.__init__。元组、列表以及其他任何内容MyList可以接受传递给Struct.from_iterable相反,它将负责构建MyList要传递到的实例Struct.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 数据类:如果 __post_init__ 执行类型转换,则使用什么类型? 的相关文章

  • 如果两点之间的距离低于某个阈值,则从列表中删除点

    我有一个点列表 只有当它们之间的距离大于某个阈值时 我才想保留列表中的点 因此 从第一个点开始 如果第一个点和第二个点之间的距离小于阈值 那么我将删除第二个点 然后计算第一个点和第三个点之间的距离 如果该距离小于阈值 则比较第一点和第四点
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • Pandas/Google BigQuery:架构不匹配导致上传失败

    我的谷歌表中的架构如下所示 price datetime DATETIME symbol STRING bid open FLOAT bid high FLOAT bid low FLOAT bid close FLOAT ask open
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 命令行“sort | uniq -c | sort -n”的替代方法

    I use sort uniq c sort n多年来 但今天它失败了 因为我的输入文件是 10 GB 并且我的 tmp宽度为 1 GB sort write failed tmp sortmIGbL No space left on de
  • 如何在 JavaFX 中将图像显示为工具提示?

    我想显示图像作为工具提示 它工作正常 但在某些随机点它显示出波动 我想正常显示而不出现波动 我在鼠标输入事件上显示一个新场景 其中我添加了带有图像的图像视图 并在鼠标离开事件事件上关闭它 MOUSE ENTER PHOTO CORRECTI
  • Mod security 阻止对 URI 路径的 GET 请求

    我需要阻止某个 URI 路径的 GET 请求 我正在使用异常模式 但我使用的是直接块规则 我无法使规则正常工作 example GET secure test bla bla 例子https bla bla com secure test
  • php 会话立即销毁

    当我将会话设置为瞬间时 会话似乎会起作用 然后它们就会被销毁 这是我的 phpinfo 页面 有人能看到问题吗 我无权访问 phpini 文件 您能否检查我的 cookie 设置并告诉我是否可以使用这些设置 http cksgrill ne
  • 在辅助路由中访问子级:Angular

    I have root路由定义为 const routes Routes path component HomeComponent path module1 loadChildren module1 module1 module Modul
  • 如何定义导入变量类型

    I have noImplicitAny set to true对于我的 TypeScript 编译器 当我使用如下所示的导入时 它会抛出错误 因为我没有显式定义类型foo多变的 import as foo from bar 我能够定义一个
  • 证明具有相同中序和先序遍历的二叉树是相同的?

    有谁知道如何prove如果两个二叉树具有相同的中序和先序遍历 那么它们是相同的 也许通过表明不能有两个具有相同中序和先序遍历的不同二叉树 或者 展示一个反驳这一点的案例 或者展示为什么不能这样做 我承认 这纯粹是学术性的 但它不是家庭作业或
  • 残疾人不工作

    Not working disabled true disabled isDisabled ts gt isDisabled true 基本的 html 禁用器也不起作用 html gt disable attr disabled true
  • 任何人都知道用于托管 win32 exes/dll 的免费/便宜的命令行资源编辑器

    我已被推荐 资源调谐器控制台 http www heaventools com command line resource editor htm但这有点超出了我的价格范围 我正在寻找可以从 nant 构建脚本启动的东西 并告诉它用附加属性标
  • 学说查询不同的相关实体

    我可能忽略了一些非常简单的东西 只是一直盯着它看太多 但我无法让这个 DQL 查询工作 我收到一个异常说明 Cannot select entity through identification variables without choo
  • Symfony Doctrine Migrations,如何使用多个实体管理器

    使用 Symfony 2 5 和 Doctrine 2 2 我有几个用于我正在开发的应用程序的数据库 我们将一个称为 主 另一个称为 辅助 当前配置了两个实体管理器 在一次迁移中 我想在 辅助 中创建一个表 但它只想在 主 中创建表 迁移可
  • 将超过 31 天的文件移至另一个驱动器

    Function Move Moves all files older than 31 days old from the Source folder to the Target Get Childitem Path E source Wh
  • 收到ACTION_SHUTDOWN后发送数据

    我知道当设备关闭时应用程序会收到 ACTION SHUTDOWN 广播事件 当应用程序收到关闭消息时 是否仍有机会发送数据包 或者 android 是否会阻止此类尝试 或者平台是否会在发出数据包之前拆除网络堆栈 事实证明 在手机完全死机之前
  • 使用 django-piston 进行基本的 http 身份验证

    我是这方面的新手 我在官方网站上看到了代码片段 粘贴在下面 问题是如何将其部署到服务器 在哪里设置用户名和密码凭据 在 Apache 的 httpd conf 文件中 from django conf urls defaults impor
  • QTextEdit::setTextFormat(Qt::LogText) 不再存在,我还能用什么来记录?

    我的 C 应用程序中需要一个文本记录器 QTextEdit在 Qt 3 3 之前曾经有此功能 但不幸的是它已被删除 我可以使用其他替代方案吗 两种选择 你可以简单地使用QTextEdit setReadOnly true 这 老的Qt Lo
  • 为 Jekyll 服务时参数数量错误(1 对 2)

    全新安装 Jekyll 和 Octopress 启动服务器时 它会产生 Homes MacBook Pro octopress home jekyll serve Configuration file Users home octopres
  • 带有曲面细分着色器的 GL_Triangles

    当我使用曲面细分着色器时 我是否必须从 CPU 程序补丁而不是三角形传递 glDrawArrays GL PATCHES 0 3 Works with Tess Shaders glDrawArrays GL TRIANGLES 0 3 W
  • IOS FacebookShare 返回错误“保留”

    我尝试过搜索但找不到答案 我已经编写了一个应用程序 我正在尝试将内容分享到 Facebook 基本上我想分享一个网址 也许还有一个引言或标题 我不断收到一个名为 保留 的错误 但我不确定它的含义或如何修复它 任何帮助都会很棒 func fb
  • 如何从 android 中的列表视图中获取下一个和上一个列表项

    我有一个列表视图 其中包含一些类似于 Twitter 推文的列表项 当我单击特定列表项时 它会显示该特定列表项的详细信息 在该活动中 包含两个按钮 用于显示 下一个 列表项详细信息和 上一个 列表项详细信息 Problem 如何使用视图翻转
  • Python 数据类:如果 __post_init__ 执行类型转换,则使用什么类型?

    我有一个 Python 类 其中有一个可以传递多种序列类型之一的字段 为了简化 我将坚持使用元组和列表 init 将参数转换为MyList from typing import Union from dataclasses import d