Skip to main content
 首页 » 编程设计

python之在创建 namedtuple 时避免输入名称两次

2025年05月04日25think

namedtuple 创建通常需要输入两次名称,一次是提供包含新类的模块级变量的名称,一次是设置类的 __name__ 属性新类(用于打印出类对象,我认为主要用于调试、日志记录等)。

使用函数(下面的 new_namedtuple)来减少样板代码,除了有点出乎意料之外,还有什么缺点吗?使用 globals() 是正确的还是应该使用 exec?当然,只有当我们希望类名和变量名相同时才有效:

>>> from collections import namedtuple 
>>> def new_namedtuple(name, *args, **kwargs): 
...   globals()[name] = namedtuple(name, *args, **kwargs) 
... 
>>> new_namedtuple('Point', 'x y') 
>>> p = Point(x=1, y=10) 
>>> p 
Point(x=1, y=10) 

编辑:@Moinuddin Quadri 指出导入会失败。那可不行。那么让我重新表述一下我的问题:最好的方法是什么?还是不值得?

请您参考如下方法:

在 3.6 中推荐使用 typing.NamedTuple 的方式可以满足您的要求,但需要您使用类型提示。

from typing import NamedTuple 
 
class Point(NamedTuple): 
    x: int 
    y: int 
 
p = Point(1, 10) 

打字提示会以错误的方式摩擦。不幸的是,collections.namedtuple 不支持这种用法,希望能有所改变。