IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

surcharge, héritage, extension d'objets


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 130
    Par défaut surcharge, héritage, extension d'objets
    Bonjours, j'ai un code qui ecrit un fichier puis l'importe.
    De facon extrèmement simplifiée, cela ressemble à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open("module.py", w) as f:
        f.write("print('le module est importé')")
    mod = __import__("module")
    Le problème, c'est qu'a la fin de l'execution du code, le fichier "module.py" existe toujours. Dans cet example ça ne semble pas important, d'autant plus qu'il est créé dans un fichier temporaire mais dans le "vrai" code, j'atteind rapidement les 40 Go de fichiers...
    je cherche donc ici a surcharger 'mod' de la methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    __del__(self):
        """suppression du fichier associer"""
    Mais je n'arrive pas à l'implémenter!
    j'ai tenter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Surcharge:
        def __init__(self, module):
            module.__init__(self)
    Ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Module:
        pass
    class Surcharge(Module):
        def __init__(self):
            ???
    Je n'ai pas de souci pour surcharger une classe que j'ai moi-même créer mais je n'arrive pas a surcharger un module.
    Merci pour votre aide!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Votre idée est bizarre et créer du code "à la volée" est rarement une bonne idée ou plutôt un raccourci dangereux.
    Ceci dit, quitte à créer du code à la volée, pourquoi créer un module plutôt qu'une classe? Pourquoi passer par un fichier plutôt que de faire exec?
    Cela étant vous ne pouvez par hériter d'un module (comme vous ne pouvez pas hériter d'une fonction ou de tas d'autres objets).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 130
    Par défaut
    En fait, cette partie de code s'inscrit dans un projet de calcul distribué.
    Au sein du code, j'ai une fonction serialize et deserialize, qui serialise et deserialise plus de chose que pickle. Dons en particulié les pointeur de fichier et les modules.
    Je n'ai pas trouvé d'autre moyen pour le serialiser que de copier le module ou le fichier pointé par le pointeur. ça fonctionne, mais ça fait des traces. Pour les limiter, je les colle dans un fichier temporaire, seulement ce fichier est supprimé au redémarrage de l'ordinateur, pas quand l'objet n'est plus utilisé...
    donc j'ai eu l'idée de 2 solutions mais je ne sais ps comment m'y prendre pour chacune d'entre elles:
    -faire en sorte qu'une methode de suppression de fichier soit automatiquement appellée à la destruction de l'objet
    -écrire dans un dossier temporaire qui est supprimé automatiquement a la fin du code

    Si je comprend ce que vous me dites, Il n'y a aucun moyen dans le cas général d'ajouter une méthode à un objet déjà existant?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par robinechuca Voir le message
    Si je comprend ce que vous me dites, Il n'y a aucun moyen dans le cas général d'ajouter une méthode à un objet déjà existant?
    Vous pouvez ajouter des attributs à n'importe quel objet. Mais rien ne garanti que çà va fonctionner (si l'objet n'est pas une classe).
    Sinon pour votre histoire, vous pourriez essayez de détruire le fichier juste après l'import.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éprouvé
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 130
    Par défaut
    C'est la solution temporaire que j'utilise mais je dis temporaire car le test c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if not "win" in sys.platform:
       """supression"""
    else:
       """suppression pas possible"""
    Le but est de trouver une solution multi-platforme...

    Dans ce cas, si on ne peut ajouter des méthodes à une classe seulement, comment peu-t-on convertir un module en classe?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par robinechuca Voir le message
    C'est la solution temporaire que j'utilise mais je dis temporaire car le test c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if not "win" in sys.platform:
       """supression"""
    else:
       """suppression pas possible"""
    Le but est de trouver une solution multi-platforme...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import toto
    os.remove(toto.__file__)
    est multiplateforme (et modulo de s'abstenir de générer les .pyc) çà devrait faire le ménage.

    Citation Envoyé par robinechuca Voir le message
    Dans ce cas, si on ne peut ajouter des méthodes à une classe seulement, comment peu-t-on convertir un module en classe?
    Vous pourriez vous inspirez du code de werkzeug.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. HashMap, généricité, wildcard, héritage, extension
    Par kenji_getpowered dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 01/04/2010, 17h40
  2. [PDO] Surcharger l'extension du singleton
    Par hornetbzz dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/03/2010, 18h24
  3. [1.x] Extension modèle Objet
    Par nathieb dans le forum Symfony
    Réponses: 1
    Dernier message: 18/02/2009, 16h31
  4. Réponses: 8
    Dernier message: 09/09/2008, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo