NameError: il nome 'self' non è definito
Domanda
Perché tale struttura
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
dà un errore NameError: il nome 'self' non è definito
?
Soluzione
I valori degli argomenti predefiniti vengono valutati al momento della definizione della funzione, ma self
è un argomento disponibile solo al momento della chiamata della funzione. Pertanto, gli argomenti nell'elenco degli argomenti non possono riferirsi l'un l'altro.
È un modello comune l'impostazione predefinita di un argomento su None
e aggiungere un test per questo nel codice:
def p(self, b=None):
if b is None:
b = self.a
print b
Altri suggerimenti
Per i casi in cui si desidera anche avere l'opzione di impostare 'b' su Nessuno:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
Se sei arrivato qui tramite Google, assicurati di aver dato self come primo parametro di una funzione di classe. Soprattutto se si tenta di fare riferimento a valori per quell'oggetto all'interno della funzione.
def foo():
print(self.bar)
> NameError: il nome 'self' non è definito
def foo(self):
print(self.bar)
> " Complimenti ti sei sbarazzato di NameError! "