gpt4 book ai didi

Python 3.7 : Utility of Dataclasses and SimpleNameSpace

转载 作者:IT老高 更新时间:2023-10-28 21:13:58 24 4
gpt4 key购买 nike

Python 3.7 提供了新的 dataclasses,它们具有预定义的特殊功能。

从总体上看,dataclassesSimpleNamespace 都提供了很好的数据封装工具。

@dataclass
class MyData:
name:str
age: int

data_1 = MyData(name = 'JohnDoe' , age = 23)

data_2 = SimpleNamespace(name = 'JohnDoe' , age = 23)

很多时候我使用 SimpleNamespace 只是为了包装数据并移动它。

我什至将其子类化以添加特殊功能:

from types import SimpleNamespace

class NewSimpleNameSpace(SimpleNamespace):
def __hash__(self):
return some_hashing_func(self.__dict__)

对于我的问题:

  1. 人们如何在 SimpleNamespacedataclasses 之间进行选择?
  2. 当扩展 SimpleNamespace 可以达到相同的效果时,为什么它们是必要的?
  3. 所有其他用例 dataclasses 迎合什么?

最佳答案

Dataclasses 更像 namedtuple 和流行的 attrs包而不是 SimpleNamespace (the PEP 中甚至没有提到)。它们有两种不同的预期目的。

数据类

  • 结构化
  • 键入(默认情况下,但可选)
  • 为基本的 dunder 方法(__init____hash____eq__ 等)编写大部分样板文件
  • 为属性的默认值提供简单的机制
  • 可以轻松添加__slots__和方法

简单命名空间

  • “抓包”数据结构
  • 用于您需要的不仅仅是字典但不需要类的地方
  • 不打算使用 __slots__
  • 之类的东西

来自 SimpleNamespace 文档:

SimpleNamespace may be useful as a replacement for class NS: pass. However, for a structured record type use namedtuple() instead.

由于 @dataclass 应该替换 namedtuple 的很多用例,命名记录/结构应该用 @dataclass 来完成,而不是 SimpleNamespace

您可能还想查看 this PyCon talk by Raymond Hettinger ,在那里他进入了 @dataclass 的背景故事以及它的用途。

关于Python 3.7 : Utility of Dataclasses and SimpleNameSpace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51082418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com