prendere il codice seguente:"variabile locale referenziata prima dell'assegnazione" - solo funzioni?
import something
def Foo():
something = something.SomeClass()
return something
... questo è apparentemente codice non valido:
UnboundLocalError: local variable 'something' referenced before assignment
... come variabile locale viene creata something
, ma non assegnato, prima che il RHS del =
viene valutata . (Vedi, ad esempio, this related answer's comment.) Mi sembra un po 'strano, ma certo, ci vado. Ora, perché è il seguente codice valido?
class Foo(object):
something = something.SomeClass()
mia comprensione è che l'interno di una definizione class
era essenzialmente un ambito:
interno della classe viene quindi eseguito in una nuova cornice di esecuzione (vedere la sezione denominazione e vincolante), utilizzando una nuova creato spazio dei nomi locale e lo spazio dei nomi globale originale.
Quindi, perché il codice funziona in modo diverso rispetto a quello di una funzione?
"qualcosa" sembra avere più di un significato? – Johnsyweb
@Johnsyweb: Sì, tipo di. Ma in entrambi i casi, ha lo stesso tipo di significato più di uno. (O, almeno, tutti i documenti che ho letto sembrano dirlo.) – Thanatos