|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2011
Messaggi: 125
|
[Python] global name is not defined
Codice:
>>>class Carta: ... ListaSemi = ["Fiori", "Quadri", "Cuori", "Picche"] ... ListaRanghi = ["impossibile", "Asso", "2", "3", "4", "5", \ ... "6", "7", "8", "9", "10", "Jack", "Regina", "Re"] ... def __init__(self, Seme=0, Rango=0): ... self.Seme = Seme ... self.Rango = Rango ... def __str__(self): ... return (self.ListaRanghi[self.Rango] + " di " + self.ListaSemi[self.Seme]) ... ... def __cmp__(self, Altro): ... if self.Seme > Altro.Seme: return 1 ... if self.Seme < Altro.Seme: return -1 ... ... if self.Rango == ListaRanghi[1] and Altro.Rango != ListaRanghi[1]: return 1 ... if self.Rango > Altro.Rango: return 1 ... if self.Rango < Altro.Rango: return -1 ... ... return 0 Codice:
>>>F = Carta(1, 1) >>>T = Carta(1, 13) >>>F.__cmp__(T) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 15, in __cmp__ NameError: global name 'ListaRanghi' is not defined
Ultima modifica di Heretic Curse : 01-05-2013 alle 13:13. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jul 2009
Messaggi: 146
|
Ti dice che non è definita perchè non è una lista globale ma dell'oggetto , devi quindi specificarlo con self :
Codice:
self.ListaRanghi |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Mar 2011
Messaggi: 125
|
Ti dirò, avevo chiaramente pensato a questa soluzione, solo che non so se ho capito più di tanto la logica che ci sta dietro. In sostanza, se la Lista si fosse trovata al di fuori della classe punto o all'interno della definizione di __cmp__ avrebbe funzionato? mentre in questo caso, trovandosi appunto all'interno della classe devo richiamarla con self perché appunto self, in quanto presente come parametro di __init__, definisce il fatto che ci stiamo riferendo a delle liste presenti nella classe?
Spero di non aver fatto un discorso troppo ingarbugliato, è che se non capisco esattamente quello che succede poi lo dimentico |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
ListaRanghi è un membro della classe istanza, quindi per accedervi devi SEMPRE premettere il self.
Se fosse stata una variabile di modulo (globale) o un oggetto built-in (len, list, int, ecc.) puoi accedervi direttamente (tranne per le variabili definite in altri moduli che non hai importato col from MODULO import).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Mar 2011
Messaggi: 125
|
Ok, grazie mille per la delucidazione
il commento di Donald Knuth nella tua firma mi ha messo paura D: non che in effetti Python sia complesso, ma un pomeriggio D: Ultima modifica di Heretic Curse : 02-05-2013 alle 19:06. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Parliamo di un mostro sacro della programmazione.
Comunque Python a livello di linguaggio è abbastanza semplice da imparare per chi ha già parecchia esperienza.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:45.



















