在下面的代码中:
point=namedtuple('point','x y')
我很困惑,一个类被视为一个值。和我一样:
class point:
...
它在命名空间中创建一个名为point的类对象,但不在命名的元组中创建。
如果是这种情况,解释器如何识别价值?喜欢
x=12; y=12;
x
和y
指的是相同的值12。
如果我做
point1=namedtuple('point','x y')
它之前是否引用了同一个类?
答案 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
中)。