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 的 type 的 name。所以,如果你用 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" 时,它可能是以下两种情况之一:
"inherent" 名称,它是类型本身定义的一部分,可通过其 __name__
属性访问。
引用类型的变量名称。可以有多个引用相同类型的变量,并且 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
.
的两个现存引用之一来查看固有名称
我还是 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 的 type 的 name。所以,如果你用 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" 时,它可能是以下两种情况之一:
"inherent" 名称,它是类型本身定义的一部分,可通过其
__name__
属性访问。引用类型的变量名称。可以有多个引用相同类型的变量,并且 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
.