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