Python 3.7 提供了新的 dataclasses
,它们具有预定义的特殊功能。
从总体上看,dataclasses
Và Không gian tên đơn giản
都提供了很好的数据封装工具。
@dataclass
class MyData:
name:str
age: int
data_1 = MyData(name = 'JohnDoe' , age = 23)
data_2 = SimpleNamespace(name = 'JohnDoe' , age = 23)
很多时候我使用 Không gian tên đơn giản
只是为了包装数据并移动它。
我什至将其子类化以添加特殊功能:
từ các loại nhập SimpleNamespace
class NewSimpleNameSpace(SimpleNamespace):
def __hash__(self):
return some_hashing_func(self.__dict__)
对于我的问题:
- 人们如何在
Không gian tên đơn giản
Và dataclasses
之间进行选择?
- 当扩展
Không gian tên đơn giản
可以达到相同的效果时,为什么它们是必要的?
- 所有其他用例
dataclasses
迎合什么?
Dataclasses 更像 têntuple
和流行的 attrs包而不是 Không gian tên đơn giản
(the PEP 中甚至没有提到)。它们有两种不同的预期目的。
数据类
- 结构化
- 键入(默认情况下,但可选)
- 为基本的 dunder 方法(
__nóng__
、__hash__
、__eq__
等)编写大部分样板文件
- 为属性的默认值提供简单的机制
- 可以轻松添加
__slots__
和方法
简单命名空间
- “抓包”数据结构
- 用于您需要的不仅仅是字典但不需要类的地方
- 不打算使用
__slots__
之类的东西
từ Không gian tên đơn giản
文档:
SimpleNamespace may be useful as a replacement for class NS: pass
. However, for a structured record type use namedtuple()
thay vì.
由于 @dataclass
应该替换 têntuple
的很多用例,命名记录/结构应该用 @dataclass
来完成,而不是 Không gian tên đơn giản
。
您可能还想查看 this PyCon talk by Raymond Hettinger ,在那里他进入了 @dataclass
的背景故事以及它的用途。
Tôi là một lập trình viên xuất sắc, rất giỏi!