Python Language Héritage de base


Exemple

L'héritage dans Python est basé sur des idées similaires utilisées dans d'autres langages orientés objet tels que Java, C ++, etc. Une nouvelle classe peut être dérivée d'une classe existante comme suit.

class BaseClass(object):
    pass

class DerivedClass(BaseClass):
    pass

La BaseClass est la classe ( parent ) existante et la classe DerivedClass est la nouvelle classe ( enfant ) qui hérite (ou sous - classe ) les attributs de BaseClass . Remarque : à partir de Python 2.2, toutes les classes héritent implicitement de la classe d' object , qui est la classe de base de tous les types intégrés.

Nous définissons une classe Rectangle parent dans l'exemple ci-dessous, qui hérite implicitement de l' object :

class Rectangle():
    def __init__(self, w, h):
        self.w = w
        self.h = h
    
    def area(self):
        return self.w * self.h
        
    def perimeter(self):
        return 2 * (self.w + self.h)

La classe Rectangle peut être utilisée comme classe de base pour définir une classe Square , car un carré est un cas particulier de rectangle.

class Square(Rectangle):
    def __init__(self, s):
        # call parent constructor, w and h are both s
        super(Square, self).__init__(s, s)
        self.s = s

La classe Square héritera automatiquement de tous les attributs de la classe Rectangle ainsi que de la classe d'objet. super() est utilisé pour appeler la __init__() de la classe Rectangle , appelant essentiellement toute méthode surchargée de la classe de base. Note : dans Python 3, super() ne nécessite aucun argument.

Les objets de classe dérivés peuvent accéder et modifier les attributs de ses classes de base:

r.area()
# Output: 12
r.perimeter()  
# Output: 14

s.area()
# Output: 4
s.perimeter()
# Output: 8

Fonctions intégrées qui fonctionnent avec l'héritage

issubclass(DerivedClass, BaseClass) : renvoie True si DerivedClass est une sous-classe de BaseClass

isinstance(s, Class) : renvoie True si s est une instance de Class ou de l'une des classes dérivées de Class

# subclass check        
issubclass(Square, Rectangle)
# Output: True

# instantiate
r = Rectangle(3, 4)
s = Square(2)

isinstance(r, Rectangle)  
# Output: True
isinstance(r, Square)
# Output: False
# A rectangle is not a square

isinstance(s, Rectangle)
# Output: True
# A square is a rectangle
isinstance(s, Square)
# Output: True