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 :

Héritage de classe et unpacking [Python 2.X]


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Points : 138
    Points
    138
    Par défaut Héritage de classe et unpacking
    Bonjour à tous

    J'ai commencer à coder une classe pour faire de la gestion de fichier plat (Lecture, écriture, copy,...), dans le cadre de mon travail. Ce dernier se fait sur un logiciel de supervision et je doit pouvoir écrire/modifier des fichiers de configuration pour mes hôtes et services.

    Dans ce cadre j'ai donc créer deux classe hérité de ma classe mère, une pour les services et une pour les hôtes, la classe mère contient les fonction et les attribut qu'on retrouve dans les deux classes filles. Pour passer les paramètres à ces classes, j'utilise un dictionnaire et l'unpacking. Le soucis que je rencontre c'est que dans l'appel du constructeur fille, je prend seulement trois arguments du dictionnaire (address, parents, realm) dans mon unpacking, les deux restants (hostname, use) sont a utiliser par le constructeur de la classe mère. Mais bien sur, lors de l'appel de la classe fille, je me retrouve avec un :

    Code Erreur : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: __init__() got an unexpected keyword argument 'use'

    Avant de poursuivre je vais vous montrer le script qui appelle la classe et le code des constructeurs.

    Code Création de l'objet : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data={'address': '192.168.1.1',
            'use': 'generic-host',
            'hostname': 'shinken',
            'parents': 'toto.vip3g.lan',
            'realm': 'un_realm_au_pif'}
     
    test = conf.ModifHost(**data)

    Code Constructeur classe fille : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ModifHost(Modif):
        def __init__(self,address, parents=None, realm=None, data={}):
     
            super(ModifHost, self).__init__(**data)
     
            self.address = address
            self.parents = parents
            self.realm = realm
            self.type='Host'

    Code Constructeur de la classe mère : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Modif(object):
       def __init__(self, hostname, use):
     
            self.path = None
            self.contenu = []
            self.hostname = hostname
            self.use = use
            self.type=None
     
            self.path = '/etc/shinken/hosts/'+ hostname +'/'+ hostname +'.cfg'

    Voilà, donc ce qui se passe maintenant, une fois que je créer mon objet ModifHost, les 3 paramètres address, parents et realm sont bien pris en compte, mais mes arguments use et hostname qui ne sont utilisés que dans le constructeur de la classe mère font planter le code (cf l'erreur en haut) et il ne passe pas dans le dernier paramètre du constructeur de ma classe fille mon dictionnaire " data={} ".

    Ce que je cherche à faire justement, c'est faire en sorte que les paramètre de mon dictionnaire supplémentaire passe dans un dictionnaire data en arrivant dans la classe puis soit renvoyer dans le constructeur de la classe mère pour être unpacker.

    Si quelqu’un à une piste je suis preneur.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Hello,

    Code Constructeur classe fille : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class ModifHost(Modif):
        def __init__(self,address, parents=None, realm=None, **data):
     
            super(ModifHost, self).__init__(**data)
            ...

    On utilise la même forme pour "packer" et "dépacker"

    Accessoirement, jamais de dico (ou de liste ou de n'importe quoi de mutable) en paramètres par défaut d'une fonction ou méthode.
    Pourfendeur de singletons en croisade

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Points : 138
    Points
    138
    Par défaut
    Merci beaucoup! Ça fonctionne.

    Je en savais pas qu'on utilisait la même forme, puisque les seuls exemple que j'avais vu mettait la totalité des paramètres dans la création de la méthode.

    Et pour les mutables en paramètres, me semblait bien, mon ide gueulait un peu, mais je le saurais maintenant, merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. conflit d'inclusions et Héritage de classe
    Par gedeon555 dans le forum C++
    Réponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  3. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

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