【问题标题】:Mutable namedtuple?可变命名元组?
【发布时间】:2018-04-16 11:17:58
【问题描述】:

假设我有:

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

谁能解释一下两者的区别:

  1. NT.x = 3
  2. var = NT(x=3)

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

【问题讨论】:

    标签: python namedtuple


    【解决方案1】:

    NT 不是命名元组。 NT 是一个类。它的实例是命名元组。

    您不能在实例上重新分配 x。虽然您可以在技术上与类上的x 混淆,这将破坏实例的x 属性的属性访问,因为类上的xdescriptor实例依赖实现对应的实例属性。

    【讨论】:

      【解决方案2】:

      namedtuple 是一个类工厂。

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

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

      【讨论】:

        【解决方案3】:

        NT.x NT 的属性,而不是该类的实例

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

        它的存在只是告诉您NT 的实例有一个名为x 的属性。另见this question

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-29
          • 2017-07-02
          • 2013-11-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多