创建namedtuple时,避免两次输入键入名称

max*_*max 1 python namedtuple

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)
Run Code Online (Sandbox Code Playgroud)

编辑:@Moinuddin Quadri指出进口将失败.那不好.所以让我重新解释一下我的问题:最好的方法是什么?还是不值得?

Guy*_*emi 5

在3.6中使用typing.NamedTuple的推荐方法将满足您的请求,但要求您使用类型提示.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

p = Point(1, 10)
Run Code Online (Sandbox Code Playgroud)

打字暗示有些错误.不幸的是,collections.namedtuple不支持这种用法,手指越过那种变化.

  • 哇,这怎么进入python 3.6?我认为在没有为"Enum"赋值的情况下定义属性的类似方法在最后一刻被拒绝,因为它看起来很奇怪并且会混淆静态分析器.但我想,因为它已经在语言中,不妨使用它. (2认同)