为什么我不能读';typename';在Python中创建namedtuple对象之后

为什么我不能读';typename';在Python中创建namedtuple对象之后,python,python-3.x,namedtuple,Python,Python 3.x,Namedtuple,此查询进一步参考 因此,我尝试执行以下代码: from collections import * tp = namedtuple('emp', 'eid enames mob') print(tp) print(emp) 我可以执行print(tp),生成的输出是 但当我尝试执行print(emp)时,它会生成以下异常: Traceback (most recent call last): File "a.py", line 5, in <module> print(

此查询进一步参考

因此,我尝试执行以下代码:

from collections import *

tp = namedtuple('emp', 'eid enames mob')
print(tp)
print(emp)
我可以执行
print(tp)
,生成的输出是

但当我尝试执行
print(emp)
时,它会生成以下异常:

Traceback (most recent call last):
  File "a.py", line 5, in <module>
    print(emp)
NameError: name 'emp' is not defined
回溯(最近一次呼叫最后一次):
文件“a.py”,第5行,在
打印(emp)
NameError:未定义名称“emp”
原因是什么。创建类
emp
。但我不知道如何直接访问它。或者我不能

因此,基本上,我可以创建
tp
的实例作为
tp()
,但不能以相同的方式创建
emp
的实例。为什么?

选项1:分配给返回的类型时,只需重复类型名称即可

tp = emp = namedtuple('emp', 'eid enames mob')
选项2:使用声明式样式而不是函数式API

from typing import NamedTuple

class emp(NamedTuple):
    eid: str
    enames: str
    mob: str
选项1:分配给返回的类型时,只需重复类型名称即可

tp = emp = namedtuple('emp', 'eid enames mob')
选项2:使用声明式样式而不是函数式API

from typing import NamedTuple

class emp(NamedTuple):
    eid: str
    enames: str
    mob: str

如果我不能使用,我想知道
emp
的目的是什么。我对问题进行了编辑以反映相同的问题。它被设置为类型的名称。检查tp.\uuuuu name\uuuuu您是对的,
tp.\uuuuuu name\uuuuuu
是否显示
emp
。事实上,如果我创建一个
tp
的对象,
type(myobj)
将type显示为
emp
。但是我不能使用
emp
创建对象。为什么会这样?因为emp这个名字在你的范围内没有绑定。您已将返回的类型分配给其他名称。如果无法使用,我想知道
emp
的用途。我对问题进行了编辑以反映相同的问题。它被设置为类型的名称。检查tp.\uuuuu name\uuuuu您是对的,
tp.\uuuuuu name\uuuuuu
是否显示
emp
。事实上,如果我创建一个
tp
的对象,
type(myobj)
将type显示为
emp
。但是我不能使用
emp
创建对象。为什么会这样?因为emp这个名字在你的范围内没有绑定。您已将返回的类型分配给其他名称。