51 votes

Utiliser self.* comme valeur par défaut pour une méthode

def save_file(self, outputfilename = self.image_filename): 
    self.file.read(outputfilename)
    ....

donne NameError: name 'self' is not defined dans la première ligne. Il semble que Python ne l'accepte pas. Comment puis-je réécrire le code pour qu'il ne lève pas d'exception ?

50voto

Ignacio Vazquez-Abrams Points 312628

Utilisez une valeur par défaut de None et détectez-le.

 def save_file(self, outputfilename=None): 
    if outputfilename is None:
        outputfilename = self.image_filename
    self.file.read(outputfilename)
    ....

14voto

David Heffernan Points 292687

La documentation indique :

Les valeurs des paramètres par défaut sont évaluées lors de l'exécution de la définition de la fonction.

Cela explique pourquoi l'instance ne peut pas être référencée. Comme d'autres l'ont dit, utilisez None par défaut et corrigez la valeur au moment de l'exécution de la fonction lorsque l'instance est disponible.

9voto

petr0 Points 321
def save_file(self, outputfilename=None): 
    outputfilename = outputfilename or self.image_filename
    self.file.read(outputfilename)

ou même

 def save_file(self, outputfilename=None):         
    self.file.read(outputfilename or self.image_filename)

Ce n'est peut-être rien avec une variable, mais si vous en avez, disons, 5, cela rend le code plus facile à lire, à mon avis.

3voto

def save_file(self, outputfilename = None):
    if not outputfilename:
        outputfilename = self.image_filename 
    self.file.read(outputfilename)
    ....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X