Sommaire

Duck typing

Le principe du duck typing consiste à traiter comme un canard n’importe quelle entité qui cancane, nage et vole. Même si ce n’est pas un canard. De ce fait, lorsqu’on lit du code écrit en Python, le type des objets manipulés ne peut être déduit qu’à partir de l’utilisation qu’on en fait.

Or, dans certains cas d’utilisation, il peut être tentant d’effectuer certains traitements en fonction du type de la variable manipulée. Python offre d’ailleurs la fonction native isinstance(), qui retourne True si l’objet donné en premier paramètre est une instance de la classe donnée en deuxième paramètre ou une de ses sous-classes.

Par exemple :

for animal in soigneur.animaux :  
   if isinstance(animal, Serpent) :  
          soigneur.nourrir(animal, new Insecte())  
   elif isinstance(animal, Manchot) :  
          soigneur.nourrir(animal, new Poisson())

L’utilisation de isinstance() est compréhensible : pour éviter de nourrir un animal avec de la nourriture qui ne lui correspond pas, on vérifie quel est le type de l’animal et on adapte la nourriture en conséquence. Cependant, cette technique va à l’encontre de la philosophie Python, En effet, si dans le zoo, on a un animal qui cancane, nage et vole, mais qui n’est pas un canard, on va le traiter différemment ...