Python NameError: name non è definito

Ho uno script python e ricevo il seguente errore:

Traceback (most recent call last):
  File "C:\Users\Tim\Desktop\pop-erp\test.py", line 1, in <module>  
  s = Something()
  NameError: name 'Something' is not defined

Qui è il codice che causa il problema:

s = Something()
s.out()

class Something:
    def out():
        print("it works")

Questo viene eseguito con Python 3.3.0 sotto Windows 7 x86-64.

Perché non può il Something classe può trovare?

  • La soluzione a questo problema è quello di richiamare le classi e funzioni dopo che li definiscono. Python non hanno alcun modo per avanti dichiarare le classi o metodi quindi l’unica opzione è quella di mettere le invocazioni di funzioni alla fine del programma, piuttosto che l’inizio. L’altra opzione è quella di inserire i metodi di importazione di librerie nella parte superiore del tuo file che sempre chiamato prima.
InformationsquelleAutor user1899679 | 2013-02-10



2 Replies
  1. 70

    Definire la classe prima del suo utilizzo:

    class Something:
        def out(self):
            print("it works")
    
    s = Something()
    s.out()

    È necessario passare self, come primo argomento, per tutti i metodi di istanza.

    • Ottimo, grazie! Avevo pensato per includere se stessi, solo dimenticato quando ho subito scritto questo breve esempio.
    • beh, non metodi. C’è sempre @staticmethod e @classmethod, solo per mantenere le cose interessanti 😛
    • Per divertirsi ancora di più, self lavorare con @classmethod, sarà solo un termine improprio (dovrebbe essere chiamato cls).
    • Sì, certo che è corretto. Forse non avrei aggiunto @classmethod lì-ma stavo solo cercando di implicare che possono cambiare quello che il primo argomento (o anche se si ottiene passato a tutti). Mi rendo conto che non c’è nulla di magico il nome della variabile self (a prescindere da molto radicata convenzione che davvero non dovrebbe essere violato non importa quale).
    • Io non stavo dicendo che tu hai torto. E non dubito che voi sapete tutto questo. È solo un altro fatto divertente 🙂
    • Questo è parte del principio generale di “Python viene eseguito dall’alto verso il basso, con gli spazi dei nomi.” Si inizia al top, nel namespace principale, a vedere la linea di class Something:, e analizza la classe mettendo Something nello spazio dei nomi.

Lascia un commento