PEP-557 将数据类引入到 Python 标准库中,基本上可以扮演与 collections.namedtuple
和 typing.NamedTuple
相同的角色。现在我想知道如何分离这些用例,在这些用例中,namedtuple 仍然是一个更好的解决方案。
当然,如果我们需要的话,所有的功劳都归于 dataclass
:
property
装饰器,可管理属性在同一个 PEP: 为什么不直接用 namedtuple 呢中简要说明了数据类的优点。
但是,对于命名元组来说,有一个相反的问题: 为什么不仅仅使用数据类呢? 从性能的角度来看,我猜可能名称 tuple 更好,但是还没有找到确认。
让我们考虑以下情况:
我们将在一个具有静态定义字段、类型提示和命名访问的小容器中存储页面尺寸。不需要进一步的散列、比较等。
NamedTuple 方法:
from typing import NamedTuple
PageDimensions = NamedTuple("PageDimensions", [('width', int), ('height', int)])
DataClass 方法:
from dataclasses import dataclass
@dataclass
class PageDimensions:
width: int
height: int
哪种解决方案更好? 为什么?
另外,这个问题在任何方面都不是 那个的复制品,因为在这里我问的是关于 案子的,其中 namedtuple 更好,而不是关于 区别(在问之前我已经检查了文档和源代码)