Respostas:
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
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.
def foo():
print(self.bar)
> NameError: o nome 'self' não está definido
def foo(self):
print(self.bar)