关于python:mutable namedtuple?

Mutable namedtuple?

假设我有:

1
2
from collections import namedtuple
NT = namedtuple('name', ['x'])

有人能解释一下:

  • NT.x = 3
  • var = NT(x=3)
  • 我可以把NT.x改成任何东西(可变的),但var.x是不变的。为什么会这样?


    NT不是一个namedtuple。NT是一个类。它的实例名为两个。

    不能在实例上重新分配x。虽然在技术上可以处理类上的x,但这将中断实例的x属性的属性访问,因为类上的x是实例依赖于实现相应实例属性的描述符。


    NT.xNT类的属性,不是该类的实例:

    1
    2
    >>> NT.x
    <property object at 0x7f2a2dac6e58>

    它的存在只是告诉您,NT的实例有一个名为x的属性。另请参见此问题。


    namedtuple是一个等级工厂。

    NT(x=3)为您提供了一个新创建类的实例。

    NT.x =3为类本身设置了一个属性。