问题标签 [python-dataclasses]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
184 浏览

python-3.x - 初始化属性上的函数

我需要在初始化属性之前调用一个函数,最好使用python3.7数据类,也可以命名为元组。

这段代码做了类似的事情,属性名称只输入了一次,但是非常混乱,我不知道如何支持默认值。我确信有一种更好、更 Pythonic 的方式来做到这一点。

0 投票
3 回答
9000 浏览

python - 改变数据类时验证输入

在 Python 3.7 中有这些新的“数据类”容器,它们基本上类似于可变的命名元组。假设我创建了一个代表一个人的数据类。我可以通过这样的__post_init__()函数添加输入验证:

这将使良好的输入通过:

虽然所有这些错误的输入都会引发错误:

但是,由于数据类是可变的,我可以这样做:

从而绕过输入验证。

那么,在初始化之后,确保数据类的字段不会突变为坏东西的最佳方法是什么?

0 投票
1 回答
2393 浏览

python - Python Dataclass 给了我“函数”对象没有属性“__mro__”?

如上一个问题所示:TypeError: 'int' object is not iterable while no iteration exists? ,我发现我的程序有问题。那就是:在Python中,

  • set( (0,0) )其实给你{0},但我想要{(0,0)}
  • collections.deque( ((0, 0), [ (0, 0) ] ) ).popleft()实际上给了你(0,0),而我想要((0, 0), [ (0, 0) ] )

所以现在我正在考虑设计自己的数据类。然而在测试代码中,我遇到了一个“函数”对象没有属性“ mro ”的问题。

测试代码1

测试代码1错误截图

在此处输入图像描述

测试代码 2

测试代码 2 错误截图在此处输入图像描述

我的 Python 版本是 Anaconda 3.6.8

0 投票
1 回答
737 浏览

python - 具有自定义类型类的优先级队列获取 TypeError("'>' 在 'PrioritizedItem' 和 'int' 的实例之间不支持",)?

我正在做 A* 搜索,需要将信息存储在优先级队列中。但我希望优先级队列只比较我的数据的一个字段。所以我PrioritizedItem为先验队列设计了一个类。但是,我的程序会一直运行下去。我写了一些简单的测试代码来重现这个错误:

在此处输入图像描述

初始化后,我的优先队列prior_queue还是空的。手动添加元素temp甚至给我一个错误 TypeError("'>' not supported between 'PrioritizedItem' and 'int'",)。看起来我的类型课PriortizedItem缺少一些东西。如何添加该部分?

0 投票
2 回答
10993 浏览

python - 非特定数据类实例的类型提示

我有一个接受 any 实例的函数dataclass。什么是合适的类型提示?

在 python 文档中没有找到正式的东西


这是我一直在做的,但我不认为这是正确的

另一个想法是使用Protocol带有这些类属性的 a __dataclass_fields____dataclass_params__.

0 投票
3 回答
14918 浏览

python - 如何忽略传递给数据类的额外参数?

我想创建一个config dataclass以简化对特定环境变量的白名单和访问(打字os.environ['VAR_NAME']相对于 而言是乏味的config.VAR_NAME)。因此,我需要忽略我dataclass__init__函数中未使用的环境变量,但我不知道如何提取默认值__init__以便用例如也包含*_作为参数之一的函数来包装它。

运行这个给了我TypeError: __init__() got an unexpected keyword argument 'SOME_DEFAULT_ENV_VAR'

0 投票
3 回答
10745 浏览

python - Python:从基础Dataclass继承的Dataclass,如何将值从基础升级到新类?

如何将值从基础数据类升级到继承自它的值?

示例(Python 3.7.2)

打印“嗨亚历克斯”

返回随机陌生人“人(名称='鲍勃',气味='OK')”

如何将 random_stranger 变成朋友?

返回“朋友(姓名=人(姓名='鲍勃',气味='OK'),气味='好')”

结果我想得到“朋友(名字='鲍勃',气味='OK')”。

有效,但是如何避免复制所有字段?

还是我不能在从数据类继承的类上使用 @dataclass 装饰器?

0 投票
5 回答
12203 浏览

python - 在 python 数据类 __init__ 方法中强制类型转换

我有以下非常简单的数据类:

我创建了一个类的实例,但我使用了一个字符串而不是一个整数:

我真正想要的是强制转换为我在类定义中定义的数据类型:

我必须__init__手动编写该方法还是有一种简单的方法来实现这一点?

0 投票
3 回答
10256 浏览

python - Python数据类继承类时控制初始化顺序

我所知道
的 Python 数据类允许继承,无论是使用数据类还是类。在最佳实践中(以及在其他语言中),当我们进行继承时,应该首先调用初始化。在 Python 中是:

我在做什么
由于数据类是在 Python 3.7 中引入的,我正在考虑用数据类替换我的所有类。使用数据类,它的好处之一就是__init__为您生成。当数据类需要继承基类时,这并不好——例如:


的问题问题是我们必须把超级初始化调用放在里面__post_init__,实际上是在数据类的init之后调用的。 缺点是我们失去了约定契约,初始化混乱导致我们不能覆盖超类的属性。

可以通过 的概念来解决__pre_init__。我已经阅读了该文件,并没有看到与该概念有任何关系。我错过了什么吗?

0 投票
4 回答
13404 浏览

python - 带有**kwargs(星号)的python3数据类

目前我像这样使用 DTO(数据传输对象)。

示例代码很小,但是当对象规模变大时,我必须定义每个变量。

在深入研究时,发现支持python 3.7dataclass

下面的代码是 DTO 使用的数据类。

在这种情况下,我怎样才能允许传递更多未定义的参数class Test2

如果我用过Test1,很容易。只需添加**kwargs(asterisk)__init__

但是使用数据类,找不到任何方法来实现它。

这里有什么解决办法吗?

谢谢。


编辑

结果 :{'user_id': 'hide', 'body': 'body test'}

如您所知,我想插入字典类型的数据->**temp

在数据类中使用星号的原因是相同的。

我必须将字典类型传递给类 init。

这里有什么想法吗?