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 不支持这种用法,希望能有所改变。
