Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Utiliser dans un programme, le resultat d'une fonction appele dans __init__()

+3 votes

Je souhaite améliorer mon programme mais je ne sais pas comment faire ça proprement.

J'ai une classe "Textfile" avec une méthode "lecture_fichier" qui après traitement renvoie une liste

class Textfile:
    def lecture_fichier(self):
        <traitement>
        return fic_liste

J'ai une deuxième classe qui hérite de Textfile et qui fournit notamment, sous formes d'attributs des "constantes" qui sont utilisés dans le traitement lecture_fichier.

from textfile import Textfile
class Log(Textfile):
    def __init__(self, nom):
        self.nom = nom
        fic_type = "log"
        <etc ..>

Pour faire fonctionner le tout, j'ai un programme principal "analyse" qui instancie l'objet et utilise la methode "lecture fichier" :

from log import Log
monlog = Log("routeur.txt")
logliste = Log.lecture_fichier(monlog)
print(logliste[0])

Tout est fonctionnel mais j'aimerais déplacer l'appel de la fonction "lecture_fichier" dans la méthode __init__ de ma classe Log et continuer d'avoir accès à ma liste retour dans "analyse"

J'ai tente de bricoler dans __init__ mais impossible de récupérer le résultat du traitement dans mon programme principal. J'ai testé __str__ aussi, mais pareil, je n'arrive pas à retrouver ma liste dans le programme principal.

Besoin d'un éclairage, car je suis un peu jeune sur la POO ;-)

demandé 10-Fev-2015 par Dave
edité 10-Fev-2015 par foxmask

peux-tu éditer ton post pour mettre le code en mode code (les doubles accolades {} dans la barre de l'éditeur)?
merci

1 Réponse

+10 votes

je construirais ma classe Log comme ça

class Log(Textfile):
    def __init__(self, nom)
        self.nom = nom
        self.fic_type = "log"
        self.logliste = self.lecturefichier(nom)

car lecturefichier est une méthode de Textfile dont ta classe Log hérite, donc tu as accès aux méthodes de la classe mère.

ensuite, dans ton programme principale, tu as

from log import Log

monlog = Log("routeur.txt")
logliste = Log.logliste
print(logliste[0])
#ou même 
print(Log.logliste[0])

ce qui doit correspondre à ce que tu veux...

ensuite, je ne peux que te conseiller de lire et relire Le guide ultime et définitif sur la programmation orientée objet en Python à l’usage des débutants qui sont rassurés par les textes détaillés qui prennent le temps de tout expliquer. Partie 1. et la suite...

répondu 10-Fev-2015 par Lhassa (798 points)
edité 30-Mar-2015 par Sam
...