190 votes

Appeler une fonction de classe à l'intérieur de __init__

J'écris un code qui prend un nom de fichier, ouvre le fichier, et analyse certaines données. J'aimerais faire cela dans une classe. Le code suivant fonctionne :

class MyClass():
    def __init__(self, filename):
        self.filename = filename 

        self.stat1 = None
        self.stat2 = None
        self.stat3 = None
        self.stat4 = None
        self.stat5 = None

        def parse_file():
            #do some parsing
            self.stat1 = result_from_parse1
            self.stat2 = result_from_parse2
            self.stat3 = result_from_parse3
            self.stat4 = result_from_parse4
            self.stat5 = result_from_parse5

        parse_file()

Mais cela implique que je mette toute la machinerie d'analyse dans le champ d'application de la fonction __init__ pour ma classe. Cela semble bien maintenant pour ce code simplifié, mais la fonction parse_file a également plusieurs niveaux d'indentation. Je préférerais définir la fonction parse_file() comme une fonction de classe comme ci-dessous :

class MyClass():
    def __init__(self, filename):
        self.filename = filename 

        self.stat1 = None
        self.stat2 = None
        self.stat3 = None
        self.stat4 = None
        self.stat5 = None
        parse_file()

    def parse_file():
        #do some parsing
        self.stat1 = result_from_parse1
        self.stat2 = result_from_parse2
        self.stat3 = result_from_parse3
        self.stat4 = result_from_parse4
        self.stat5 = result_from_parse5

Bien entendu, ce code ne fonctionne pas car la fonction parse_file() ne relève pas du champ d'application de la __init__ fonction. Existe-t-il un moyen d'appeler une fonction de classe à partir de l'intérieur d'une classe ? __init__ de cette classe ? Ou est-ce que je pense à cela de la mauvaise façon ?

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