可变的名字元组?

时间:2017-11-03 16:41:51

标签: python namedtuple

假设我有:

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

有人可以解释之间的区别:

  1. NT.x = 3
  2. var = NT(x=3)
  3. 我可以将NT.x更改为任何内容(可变),但var.x是不可变的。为什么会这样?

3 个答案:

答案 0 :(得分:7)

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

您无法在实例上重新分配x。虽然可以在技术上混淆了类上的x,但这会破坏实例的x属性的属性访问权限,因为类上的x是实例依赖的descriptor来实现相应的实例属性。

答案 1 :(得分:2)

namedtuple是一个班级工厂。

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

NT.x =3设置类本身的属性。

答案 2 :(得分:2)

NT >>> NT.x <property object at 0x7f2a2dac6e58> 的属性,而不是该类的实例的属性:

NT

它的存在只是告诉你x的实例有一个名为Sub SheetTabColor() Dim mySheets As Worksheets Dim mySheet As Worksheet Set mySheets = Sheets(Array("Christine", "Marina", "Roberto", "Urszula", "Lois", "Matt", "Stephanie", "Sally", "Iryna", "Katherine", "Matthew", "Julio", "Lavinia")) For Each mySheet In mySheets mySheet.Tab.Color = RGB(0, 255, 255) Next End Sub 的属性。另请参阅this question