python - NamedTuple,是被视为值的类

标签 python class namedtuple

在下面的代码中:

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

我很困惑,一个类被视为一个值。就像我做的那样:

class point:
     ...

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

如果是这种情况,解释器如何识别该值?就像在

x=12; y=12; 

xy 引用相同的值 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/

相关文章:

python - 如何有效地计算 3d numpy 数组中的相邻元素

python - 查找多个数组具有相同值的索引的快速算法

c++ - 关于指针的存在

Spring 类环境能力

class - 是否可以在 Dart 的类中将方法声明为 final?

Python:如何将 os.system 的输出重定向到 python shell?

Python 更改 pytest 测试格式以进行打印

python - 如何在 python 中访问 nametuples 中的元素?

python - 存储固定 key key :value datasets that are accessed by keys in python?的最佳方式

python - 命名元组错误