Pourquoi une telle structure
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
donne une erreur NameError: name 'self' is not defined
?
Les valeurs d'argument par défaut sont évaluées au moment de la définition de la fonction, mais self
c'est un argument disponible uniquement au moment de l'appel de la fonction. Ainsi, les arguments de la liste d'arguments ne peuvent pas se référer les uns aux autres.
C'est un modèle courant pour définir par défaut un argument None
et ajouter un test pour cela dans le code:
def p(self, b=None):
if b is None:
b = self.a
print b
Pour les cas où vous souhaitez également avoir la possibilité de définir «b» sur Aucun:
la source
Si vous êtes arrivé ici via google, assurez-vous de vérifier que vous vous êtes donné comme premier paramètre à une fonction de classe. Surtout si vous essayez de référencer des valeurs pour cet objet dans la fonction.
> NameError: le nom 'self' n'est pas défini
la source