NamedTuple,是被视为值的类

时间:2016-06-06 12:16:06

标签: python class namedtuple

在下面的代码中:

point=namedtuple('point','x y')

我很困惑,一个类被视为一个值。和我一样:

class point:
     ...

它在命名空间中创建一个名为point的类对象,但不在命名的元组中创建。

如果是这种情况,解释器如何识别价值?喜欢

x=12; y=12; 

xy指的是相同的值12。 如果我做

point1=namedtuple('point','x y') 

它之前是否引用了同一个类?

1 个答案:

答案 0 :(得分:5)

Python中的类只是对象namedtuple()每次都返回一个新类(该名称仅用于设置__name__属性)。使用相同名称多次调用namedtuple()仍将创建多个唯一的类对象:

>>> from collections import namedtuple
>>> point_one = namedtuple('point', 'x y')
>>> point_two = namedtuple('point', 'x y')
>>> point_one
<class '__main__.point'>
>>> point_one is point_two
False

您也可以使用type()函数创建多个Python类:

 >>> point_first = type('point', (object,), {})
>>> point_second = type('point', (object,), {})
>>> point_first is point_second
False

或在函数中嵌套class语句:

def foo():
    class point:
        # ...
    return point

模块顶层的class语句只创建一个类的唯一原因是Python将模块视为单例;创建模块的代码只在执行时执行,第一次导入时(之后结果存储在sys.modules中)。