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.
Partager