2017-11-03 3 views
1

Angenommen, ich habe:Veränderbares Nametuple?

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

Kann jemand den Unterschied zwischen erklären:

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

Iändernzu etwas (veränderbar) aber var.x ist unveränderlich. Warum ist das der Fall?

Antwort

7

NT ist kein Nametuple. NT ist eine Klasse. Seine Instanzen sind namedtuples.

Sie können x für eine Instanz nicht neu zuweisen. Während Sie können technisch mit der x auf der Klasse, die Attributzugriff für die x Attribut der Instanzen zu stören, wie die x auf der Klasse ist ein descriptor, dass Instanzen auf das entsprechende Instanzattribut zu implementieren abhängen.

2

namedtuple ist eine Klassenfabrik.

NT(x=3) gibt Ihnen eine Instanz Ihrer frisch erstellten Klasse.

NT.x =3 legt ein Attribut für die Klasse selbst fest.

2

NT.x ist ein Attribut der Klasse NT, nicht eine Instanz dieser Klasse:

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

Seine Anwesenheit ist einfach zu sagen, dass Fälle von NT eine Eigenschaft haben x genannt. Siehe auch this question.

Verwandte Themen