Dlaczego taka konstrukcja
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
daje błąd NameError: name 'self' is not defined
?
Domyślne wartości argumentów są oceniane w czasie definiowania funkcji, ale self
są argumentami dostępnymi tylko w czasie wywołania funkcji. Dlatego argumenty na liście argumentów nie mogą się odnosić.
Jest to typowy wzorzec do domyślnego argumentu None
i dodawania testu w kodzie:
def p(self, b=None):
if b is None:
b = self.a
print b
W przypadkach, w których chcesz mieć również opcję ustawienia „b” na Brak:
źródło
Jeśli dotarłeś tutaj przez Google, upewnij się, że podałeś self jako pierwszy parametr funkcji klasowej. Zwłaszcza jeśli spróbujesz odwołać się do wartości dla tego obiektu wewnątrz funkcji.
> NameError: nazwa „self” nie jest zdefiniowana
źródło