在下面的代码中:
point=namedtuple('point','x y')
我很困惑,一个类被视为一个值。就像我做的那样:
class point:
...
它在命名空间中创建一个名为 point 的类对象,但在命名元组的情况下则不然。
如果是这种情况,解释器如何识别该值?就像在
x=12; y=12;
x
和 y
引用相同的值 12。
如果我这样做
point1=namedtuple('point','x y')
它之前引用的是同一个类吗?
最佳答案
类在 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
中)。
关于python - NamedTuple,是被视为值的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37657222/