• [^] # Re: Le titre est trop long

    Posté par (site web personnel) . En réponse au journal Typage statique versus typage dynamique. Évalué à 6.

    Si tu prends le add(duck) précédent, soit tu le documentes avec un simple duck : canard à ajouter, doit être de type Duck ou dérivé et autant avoir un joli compilateur pour faire ce travail de vérif en plus de perdre tout intérêt au duck-typing, soit tu le documentes avec un gros duck : canard à ajouter, doit répondre à la méthode fly, quack, swim et posséder les attributs feathers, qui, en plus de ne sûrement pas être exaustif, sera une simple plaie ambulante à maintenir…

    Oui, mais pour moi le principal problème vient du fait que tu veux les avantages du typage statique avec un langage à typage dynamique, ça peut tous simplement pas marcher (tout seul).

    Ta fonction addDuck, elle ne prend pas un duck comme argument mais un truc qui à les méthode fly, quack et swim (point). Elle devrait d’ailleurs s’appeler add (pas de raison qu'une ferme accepte que des canards)

    Si tu veux un duck faut faire du isinstance. (Et la tu perds l'avantage du python)

    De la même façon, removeFeathers prend un truc à plume, pas un canard.
    Un canard sans plume c'est peu être un canard mais c'est pas un truc à plume. Faut pas chercher plus loin.

    Si tu veux une fonction qui prend un truc qui peut avoir des plumes, c'est ça:

    def removeFeathers(self, duck):
     try:
     self.feathers += duck.feathers
     duck.feathers = 0
     print "Feathers removed"
     except AttributeError:
     print "no feather"
    
    

    Dans tous les cas, tu ne peux pas faire du python comme tu ferais du c++. C'est pas la faute du python ou du typage dynamique, c'est la faute au dev qui veut du typage statique dans python. Les paradigmes sont différents, faut coder différemment.

    Matthieu Gautier|irc:starmad