Durante la lettura fmark
's risposta alla domanda What are "named tuples" in Python? ho visto che l'esempio dato non aveva lo stesso nome e di riferimento, vale a dire la parola Point
appare due volte nella seguente dichiarazione:
Il nome e il riferimento di una tupla con nome possono essere diversi?
Point = namedtuple('Point', 'x y')
Così sono andato al riferimento originale:
https://docs.python.org/2/library/collections.html#collections.namedtuple
E anche qui ho trovato altri due esempi:
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
Color = namedtuple('Color', 'red green blue')
Idealmente le parole non vengono ripetute in Python. Per esempio l'intera linea (per esempio la Point
) potrebbe essere sostituito dal seguente:
namedtuple('Point', 'x y')
O
Point = namedtuple('x y')
Naturalmente, si assume che la tupla chiamato deve avere lo stesso nome e riferimento. Quindi la mia domanda è: quando è consigliabile (se è assolutamente consentito) che una tupla nominata debba avere un nome e un riferimento diverso? Devo ancora trovare un esempio.
'namedtuple ('Punto' ...)' crea una classe denominata 'Punto', tuttavia senza assegnarla a qualche identificatore è possibile utilizzarla solo una volta, ad es. 'point1 = namedtuple ('Point', 'x y') (1, 0)', e 'type (point1) è'. È conveniente utilizzare un identificatore che corrisponde al nome della classe, ma non è necessario, ad es. 'Vertex = namedtuple ('Point' ...)'. Una classe è solo un altro oggetto in python e dovresti usare un nome diverso ogni volta che assegneresti un identificatore diverso a un nome di classe, ad es. 'Punto di classe: ... Vertex = Point' –
AChampion
A mio parere, il modulo' namedtuple' è un pasticcio orribile e dovrebbe essere stato scritto utilizzando metaclassi in primo luogo. Non è ancora del tutto chiaro per me [perché non lo era] (http://stackoverflow.com/questions/28184531), ma se lo fosse stato, avresti la possibilità di utilizzare le definizioni di classe per te tuple di nome, designare una metaclasse, non avendo bisogno di ripetere il nome della classe. –