Outils pour utilisateurs

Outils du site


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)
    a.parent.test()
    print('a.parent2.var2 : ' + a.parent2.var2)
    a.parent2.test()
python/programmes/classes_heritage_exemple.1490134333.txt.gz · Dernière modification : 2017/03/21 22:12 de root