Data Classes vs typing.NamedTuple主要用例
- 论坛
- Data Classes vs typing.NamedTuple主要用例
7 浏览
Data Classes vs typing.NamedTuple主要用例
长话短说
PEP-557将数据类引入Python标准库,它基本上可以扮演与collections.namedtuple
和typing.NamedTuple
相同的角色。现在我想知道在哪些情况下,命名元组仍然是更好的解决方案。
数据类优于命名元组的优势
当然,所有的功劳都归功于dataclass
,如果我们需要:
- 可变对象
- 继承支持
property
装饰器,可管理的属性- 开箱即用的生成方法定义或可定制的方法定义
数据类的优势在同一PEP中简要解释:为什么不只使用命名元组。
问题:在哪些情况下,命名元组仍然是更好的选择?
但是对于命名元组来说,反过来问一个问题:为什么不只使用数据类?
我猜可能是从性能的角度来看,命名元组更好,但尚未找到确认的证据。
示例
让我们考虑以下情况:
我们将在一个小容器中存储页面的尺寸,具有静态定义的字段、类型提示和命名访问。不需要进一步的哈希、比较等操作。
命名元组方法:
from typing import NamedTuple PageDimensions = NamedTuple("PageDimensions", [('width', int), ('height', int)])
数据类方法:
from dataclasses import dataclass @dataclass class PageDimensions: width: int height: int
哪种解决方案更可取?为什么?
附注:这个问题与那个问题完全不同,因为我在这里问的是命名元组更好的情况,而不是它们之间的区别(在提问之前我已经查阅了文档和源代码)。