问题标签 [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 投票
9 回答
26410 浏览

python - 在 Python 中创建嵌套的数据类对象

我有一个数据类对象,其中包含嵌套的数据类对象。但是,当我创建主对象时,嵌套对象变成了字典:

如您所见,仅**obj有效。

理想情况下,我想构造我的对象以获得如下内容:

除了在访问对象属性时手动将嵌套字典转换为相应的数据类对象之外,还有其他方法可以实现吗?

提前致谢。

0 投票
14 回答
73527 浏览

python - Python 3.7 数据类中的类继承

我目前正在尝试 Python 3.7 中引入的新数据类结构。我目前坚持尝试对父类进行一些继承。看起来参数的顺序被我当前的方法搞砸了,这样子类中的 bool 参数在其他参数之前传递。这会导致类型错误。

当我运行这段代码时,我得到了这个TypeError

我该如何解决?

0 投票
2 回答
3167 浏览

python - 在 Python 中模拟数据类时如何使用规范

我正在尝试使用 backport 包将我们的 namedtuple 类移植到 Python 3.6 中的数据类中。但是,我注意到在模拟数据类类时,您不能再使用“spec”关键字了。我认为这是因为数据类代码是自动生成的。

这是我得到的错误:

知道是否有任何方法可以自动将原始对象的所有属性设置为模拟对象?我有很多包含大量数据的数据类。如果我尝试手动设置值,那将非常乏味。

0 投票
5 回答
35708 浏览

python - Data Classes vs typing.NamedTuple 主要用例

长话短说

PEP-557将数据类引入 Python 标准库,基本上可以扮演collections.namedtupletyping.NamedTuple. 现在我想知道如何分离 namedtuple 仍然是更好的解决方案的用例。

数据类优于 NamedTuple

当然,dataclass如果我们需要,所有功劳都归于:

  • 可变对象
  • 继承支持
  • property装饰器,可管理的属性
  • 开箱即用的生成方法定义或可自定义的方法定义

数据类的优势在同一个 PEP 中进行了简要说明:Why not just use namedtuple

问:在哪些情况下,namedtuple 仍然是更好的选择?

但是对于 namedtuples 有一个相反的问题怎么样:为什么不直接使用数据类呢?我猜从性能的角度来看,namedtuple 可能更好,但还没有发现任何确认。

例子

让我们考虑以下情况:

我们将把页面维度存储在一个带有静态定义字段、类型提示和命名访问的小容器中。不需要进一步的散列、比较等。

NamedTuple 方法:

数据类方法:

哪种解决方案更可取,为什么?

PS这个问题无论如何都不是那个问题的重复,因为在这里我问的是namedtuple更好的情况,而不是区别(我在询问之前检查了文档和来源)

0 投票
3 回答
1572 浏览

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

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

我应该使用什么类型的field声明?

  • 如果我提供所有可能输入类型的并集,则代码不会记录field始终为MyListwhen access的代码。
  • 如果我只提供最终MyList类型,PyCharm 会在我Struct()通过list.

我可以改为使用:

但这非常难看,尤其是在跨 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

0 投票
1 回答
5132 浏览

python - 如何比较持有 numpy.ndarray 的数据类的相等性(bool(a==b)引发 ValueError)?

如果我创建一个包含 Numpy ndarray 的 Python 数据类,我就不能再使用自动生成__eq__的了。

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

这是因为ndarray.__eq__ 有时通过比较2 中较长的一个来返回ndarray真值的a不同的价值观什么的。a[0]b[0]

如何安全地比较@dataclass持有 Numpy 数组的 es?


@dataclass的实现__eq__是使用生成的eval()。它的源代码从堆栈跟踪中丢失,无法使用 查看inspect,但它实际上使用的是元组比较,它调用 bool(foo)。

摘抄:

0 投票
1 回答
3019 浏览

python - 为什么 dataclasses.astuple 返回类属性的深层副本?

在下面的代码中,该astuple函数正在执行数据类的类属性的深层复制。为什么它不产生与函数相同的结果my_tuple

脚注

正如Anthony Sottile 的出色回应所表明的那样,这是 Python 3.7 中编码的行为。任何希望 astuple 以与 collections.namedtuple 相同的方式解压的人都需要用类似于 .namedtuple 的方法替换它Demo.my_tuple。以下代码没有 my_tuple 脆弱,因为如果数据类的字段发生更改,则不需要修改。另一方面,如果__slots__在使用中,它将不起作用。

__hash__每当类或其超类中存在方法时,这两个版本的代码都会构成威胁。请参阅 Python 3.7 文档unsafe_hash,特别是“以下是管理隐式创建方法的规则”开头的两段__hash__()

0 投票
0 回答
2858 浏览

python-3.x - 用于自引用结构的python(3.7)数据类

随着最近对 python 数据类装饰器的介绍,编写模型类变得非常容易。

但是我不确定如何使用自引用结构/模型类的上下文 - 例如 LinkedList 的内部 ListNode/Node 模型类。

关于自引用结构,我可能会误解数据类的概念。

是否可以在这种情况下使用数据类装饰器 - 或者我错过了一些重要的概念?

提前致谢。

0 投票
3 回答
44976 浏览

python - 如何获得 Python 3.7 新的数据类字段类型?

Python 3.7 引入了称为数据类的新功能。

在函数参数中使用类型提示(注解)时,您可以使用检查模块轻松获取注解类型。如何获取数据类字段类型?

0 投票
2 回答
50617 浏览

python - 将默认列表参数传递给数据类

我想在我的类中传递默认参数,但不知何故我遇到了问题:

如果我现在尝试实例化Pizza,我会收到以下错误:

我究竟做错了什么?