Pergunta

Por que tal estrutura

class A:
    def __init__(self, a):
        self.a = a

    def p(self, b=self.a):
        print b

dá uma NameError: name 'self' is not defined erro?

Foi útil?

Solução

valores de argumento padrão são avaliadas em função de definir em tempo, mas self é um argumento só está disponível em tempo de chamada de função. Assim argumentos na lista de argumentos não pode se referir uns aos outros.

É um padrão comum para o padrão um argumento para None e adicionar um teste para que, em código:

def p(self, b=None):
    if b is None:
        b = self.a
    print b

Outras dicas

Para os casos onde você também deseja ter a opção de configuração de 'b' para Nenhum:

def p(self, **kwargs):
    b = kwargs.get('b', self.a)
    print b

Se você chegou aqui através do google, por favor, certifique-se de verificar se você tem dado eu como o primeiro parâmetro para a função de classe. Especialmente se você tentar valores de referência para o objeto dentro da função.

def foo():
    print(self.bar)

> NameError: Nome do 'self' não está definido

def foo(self):
    print(self.bar)

> "Parabéns você se livrou do NameError!"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top