python:programmes:classes_heritage_exemple
Ceci est une ancienne révision du document !
Exemple d'héritage de classe
#!/usr/bin/env python3 # -*- coding: utf-8 -*- class parent(object): def __init__(self): print("init parent") self.var = 'myvar' def test(self): print('parent') class parent2(object): def __init__(self): print("init parent2") self.var2 = 'myvar2' def test(self): print('parent2') class child(parent, parent2): def __init__(self): print("init child") # Auto-initialisation des variables de l'ensemble des classes parentes for c in __class__.mro()[1:]: c.__init__(self) # On initialise les variables avec le nom des parents for c in child.mro()[1:]: exec('self.{}=c()'.format(c.__name__)) def test(self): parent.test(self) # Appelle parent.test() sans appeler __init__() parent().test() # Appelle parent.__init__, puis la methode test de la fonction parent (mais initialise pas la variable var) parent2().test() # Appelle parent2.__init__, puis la methode test de la fonction parent2 (mais n'initialise pas la variable var2) super().test() # Appelle test de la fonction parent (sans __init__) super().__init__() # Appelle __init__ de la fonction parent (sans __init__) et initialise la variable var à myvar parent.__init__(self) # Appelle parent.__init__ et initialise la variable var à myvar parent2.__init__(self) # Appelle parent2.__init__ et initialise la variable var2 à myvar2 super(__class__, self).test() # Appelle test de la fonction parent (sans __init__) super(child, self).test() # Appelle test de la fonction parent (sans __init__) print('child') if __name__ == '__main__': # super() se base sur la première classe rencontrée dans le mro() print(child.mro()) child().test() a=child() print('a.parent.var : ' + a.parent.var) print('a.parent2.var2 : ' + a.parent2.var2) a.parent.test()
python/programmes/classes_heritage_exemple.1490134155.txt.gz · Dernière modification : 2017/03/21 22:09 de root