Python3.7提供了新的dataclasses
,它们具有预定义的特殊函数。在
总而言之,dataclasses
和{
@dataclass
class MyData:
name:str
age: int
data_1 = MyData(name = 'JohnDoe' , age = 23)
data_2 = SimpleNameSpace(name = 'JohnDoe' , age = 23)
很多时候,我使用SimpleNameSpace
来包装数据并移动它。在
我甚至将其子类化以添加特殊函数:
^{pr2}$对于我的问题:
SimpleNameSpace
和dataclasses
之间进行选择?在SimpleNameSpace
可以达到同样的效果时,为什么它们是必要的?在dataclasses
迎合了什么?在
简单的回答是,PEP 557涵盖了这一切。你的问题有点乱。。。在
为什么?
如何选择何时使用它们?
政治公众人物很清楚,他们不是替代者,并期望其他解决方案有自己的位置。在
与其他任何设计决策一样,您需要确切地决定您所关心的特性。如果这包括以下内容,那么您肯定不需要dataclasses。在
^{bq}$也就是说,SimpleNameSpace也是如此,那么我们还可以看什么来决定呢?让我们仔细看看dataclasses提供的额外特性。。。在
SimpleNameSpace的现有定义如下:
python文档接着说它提供了一个简单的}实现。与PEP 557相比,dataclasses还提供了以下选项:
__init__
、__repr__
和{显然,如果您关心排序或不变性(或者需要小生境散列控件),您应该使用dataclasses。在
其他用例?
我看不到,尽管你可以说,最初的“为什么?”涵盖其他用例。在
数据类更像
namedtuple
和流行的attrs包,而不是SimpleNamespace
(在the PEP中甚至没有提到)。它们有两个不同的目的。在数据类
__init__
,__hash__
,__eq__
,等等)__slots__
和方法SimpleNamespace
__slots__
来自
^{bq}$SimpleNamespace
文档:由于
@dataclass
应该替换namedtuple
的许多用例,命名记录/结构应该用@dataclass
完成,而不是SimpleNamespace
。在您可能还想看看this PyCon talk by Raymond Hettinger,在这里他进入了
@dataclass
的背景知识和它的用法。在相关问题 更多 >
编程相关推荐