栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

子类化集合namedtuple

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

子类化集合namedtuple

新更新:

在python
3.6+中,您可以使用新的类型化语法并创建一个

typing.NamedTuple
。新语法支持所有常规的python类创建功能(从3.6.1版开始提供文档字符串,多重继承,默认参数,方法等):

import typingclass Pokemon(MyMixin, typing.NamedTuple):    """    Attributes    ----------    name : str        What do you call your Pokemon?    type : str        grass, rock, electric, etc.    level : int        Experience level [0, 100]    """    name: str    type: str    level: int = 0 # 3.6.1 required for default args    def method(self):        # method work

对象不受此版本创建的类大多是相当于原来

collections.namedtuple
,除了几个细节。

您还可以使用与旧命名元组相同的语法:

Pokemon = typing.NamedTuple('Pokemon', [('name', str), ('type', str), ('level', int)])

原始答案


简短答案:否,除非您使用的是Python
<3.5

在P3文档似乎很清楚,除非你需要添加计算字段(即,描述符)暗示,继承

namedtuple
不被认为是规范的做法。这是因为您可以直接更新文档字符串(它们从3.5开始就可以写了!)。

子类化对于添加新的存储字段没有用。相反,只需从

_fields
属性创建一个新的命名元组类型…

可以通过直接分配

__doc__
字段来自定义文档字符串…

更新:

现在,在最新版本的Python中,轻量级数据类还有其他两种引人入胜的可能性。

一种是

types.SimpleNamespace
(Python
3.3及更高版本)
。它的结构不像
namedtuple
,但结构并非总是必需的。

需要注意的一件事

SimpleNamespace
:默认情况下,在实例化类时需要显式指定字段名称。可以通过调用以下命令轻松解决此问题
super().__init__

from types import SimpleNamespaceclass Pokemon(SimpleNamespace):    """    Attributes    ----------    name : str        What do you call your Pokemon?    type : str        grass, rock, electric, etc.    level : int        Experience level [0, 100]    """    __slots__ = ("name", "type", "level")    # note that use of __init__ is optional    def __init__(self, name, type, level):        super().__init__(name=name, type=type, level=level)

另一个有趣的选项-自python
3.7起可用-是

dataclasses.dataclass
(另请参阅PEP
557):

from dataclasses import dataclass@dataclassclass Pokemon:    __slots__ = ("name", "type", "level")    name: str  # What do you call your Pokemon?    type: str  # grass, rock, electric, etc.    level: int = 0  # Experience level [0, 100]

请注意,这两个建议在默认情况下都是可变的,而

__slots__
任何一个都不是必需的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647130.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号