Python: 定义类型或命名元组时name参数的原因

Python: Reason for the name parameter when defining a type or named tuple

我还是 Python 的新手,所以这可能是个愚蠢的问题,但我不明白 type()namedtuple() 的第一个参数的用途:

tuple_typename = namedtuple( 'tuple_typename', 'member1 member2 member3' )

custom_typename = type( 'custom_typename', (base_type,), members_dictionary )

我不明白 return 值和字符串参数之间的区别?如果 return 值是类型引用,为什么我们需要将其指定为参数?或者如果我们需要将其指定为字符串参数,为什么我们需要捕获return值?

还有一个相关问题:如果输入字符串是类型名称规范,是否有任何方法可以控制类型名称将添加到的名称空间?例如,我可以从 class 之外的现有 class 添加一个子 class 吗?

编辑: 尽管我接受了一个很好的答案,但我想知道是否有人可以澄清另一件事。一旦我定义了命名元组或自定义类型,当 and/or 时,我将在哪里使用第一个字符串参数?稍后如何使用我为该参数指定的名称来引用类型名称?那可能吗?或者一旦函数 return 值超出范围,类型引用就会丢失? 更新:查看已接受答案的评论

typename 是 namedtuple 的 typename。所以,如果你用 type() 内置函数包围元组,你会看到 typename 参数。

from collections import namedtuple

RGB = namedtuple('Colors', ['red', 'blue', 'green'])

print(RGB)  # PRINTS: <class '__main__.Colors'>

您可以使用索引或属性名称来获取值,如下所示:

from collections import namedtuple

# initialize new 'namedtuple' object
RGB = namedtuple('Colors', ['red', 'blue', 'green'])

# initialize new objects of type 'RGB'
tuple1 = RGB(5, 64, 32)

print(tuple1.red)
print(tuple1.blue)
print(tuple1[-1]) # gets the last value --> green

"Name" 是 Python 中的重载项。当一些人提到 "name of a type" 时,它可能是以下两种情况之一:

  1. "inherent" 名称,它是类型本身定义的一部分,可通过其 __name__ 属性访问。

  2. 引用类型的变量名称。可以有多个引用相同类型的变量,并且 none 这些名称可以从类型本身访问。

例如:

>>> class A:
...     pass
...
>>> x = A
>>> del A
>>> y = x
>>> A
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'A' is not defined
>>> x.__name__
'A'
>>> y.__name__
'A'

class 语句设置两种类型的名称: class 关键字后面的标识符用于设置类型的固有名称(通过将其用作调用的第一个参数到 type) 来创建一个引用该类型的新变量。该变量与其他任何变量一样,可以使用 del 取消设置,但只要 other 名称仍然引用该类型,它就不会丢失。您可以通过对类型 A.

的两个现存引用之一来查看固有名称