Python文档说:
collections.namedtuple(typename, field_names[, verbose=False][, rename=False])
Returns a new tuple subclass named typename.
它给出了一个例子
>>>Point = namedtuple('Point',
...
在我可以找到的所有示例中,namedtuple
和参数typename
的返回拼写相同。
试验,似乎论证无关紧要:
>>>Class = collections.namedtuple('Junk', 'field')
>>>obj = Class(field=1)
>>>print obj.field
1
区别是什么? typename
参数如何重要?
答案 0 :(得分:9)
执行以下代码时:
Bar = collections.namedtuple('Foo', 'field')
你是:
Foo
; Bar
的变量。该代码相当于:
class Foo:
...
Bar = Foo
del Foo
即使您将班级分配给名称不同的变量,Foo
仍然是“官方”名称,即:Bar.__name__
仍然是'Foo'
。
打印课程或实例时,您会看到不同之处:
>>> Bar = collections.namedtuple('Foo', 'field')
>>> obj = Bar(field=1)
>>> obj
Foo(field=1)
您可能会问为什么namedtuple
需要类型名称,因为它是多余的(按照惯例)。好吧,namedtuple
在分配变量之前构建类型,因此无法推断出类型名称,需要明确告知它。 (或者更好:它可以通过检查调用者的代码来推断出名称,但这种情况很糟糕,对非常规情况不起作用。)