Por que essa estrutura
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
dá um erro NameError: name 'self' is not defined
?
Os valores padrão do argumento são avaliados no tempo de definição da função, mas self
é um argumento disponível apenas no momento da chamada da função. Portanto, os argumentos da lista de argumentos não podem se referir.
É um padrão comum usar como padrão um argumento None
e adicionar um teste para isso no código:
def p(self, b=None):
if b is None:
b = self.a
print b
Nos casos em que você também deseja ter a opção de definir 'b' como Nenhum:
fonte
Se você chegou aqui pelo google, verifique se você se deu como o primeiro parâmetro para uma função de classe. Especialmente se você tentar fazer referência a valores para esse objeto dentro da função.
> NameError: o nome 'self' não está definido
fonte