Maison > développement back-end > Tutoriel Python > Explication détaillée de la programmation du type Duck Typing et de l'implémentation Python

Explication détaillée de la programmation du type Duck Typing et de l'implémentation Python

高洛峰
Libérer: 2017-03-03 15:38:55
original
2750 Les gens l'ont consulté

En programmation, le typage canard est un style de typage dynamique. Dans ce style, la sémantique effective d'un objet est déterminée non pas par l'héritage d'une classe spécifique ou par l'implémentation d'une interface spécifique, mais par l'ensemble actuel de méthodes et de propriétés.

Le nom de ce concept vient du test du canard proposé par James Whitcomb Riley. Le "test du canard" peut s'exprimer ainsi :
"Quand vous voyez un oiseau marcher comme un canard et nageant comme un Si un canard cancane comme un canard, alors l'oiseau peut être appelé un canard "
Dans la frappe du canard, l'accent n'est pas mis sur le type de l'objet lui-même, mais sur la façon dont il est utilisé. Par exemple, dans un langage qui n'utilise pas le typage duck, nous pourrions écrire une fonction qui prend un objet de type duck et appelle ses méthodes walk et bark. Dans un langage qui utilise le typage duck, une telle fonction peut accepter un objet de n'importe quel type et appeler ses méthodes walk et call. Si les méthodes qui doivent être appelées n’existent pas, une erreur d’exécution sera générée. Le fait que tout objet avec les méthodes de marche et d'appel correctes puisse être accepté par une fonction conduit à l'instruction ci-dessus, d'où le nom de cette façon de déterminer les types.
Le typage Duck gagne souvent à ne pas tester les types de paramètres dans les méthodes et les fonctions, mais à s'appuyer plutôt sur la documentation, le code clair et les tests pour garantir une utilisation correcte. Les utilisateurs passant de langages à typage statique à des langages à typage dynamique tentent souvent d'ajouter une vérification de type statique (avant l'exécution), compromettant ainsi les avantages et l'évolutivité du typage canard et limitant la nature dynamique du langage.

Exemple de code Python
L'instruction ci-dessus est peut-être trop vide. Par exemple, en Python, il existe de nombreux éléments ressemblant à des fichiers, tels que StringIO, GzipFile et socket. Ils ont bon nombre des mêmes méthodes et nous les utilisons comme fichiers.
Par exemple, dans la méthode list.extend(), peu nous importe si son paramètre est une liste, tant qu'il est itérable, donc ses paramètres peuvent être list/tuple/dict/string/generator, etc. .
Le typage Duck est souvent utilisé dans les langages dynamiques et est très flexible, ce qui fait que Python n'a pas beaucoup de modèles de conception comme Java.

L'exemple suivant utilise le typage canard pour obtenir le polymorphisme.

#coding=utf-8 
class Duck: 
  def quack(self): 
    print "Quaaaaaack!" 
 
class Bird: 
  def quack(self): 
    print "bird imitate duck." 
 
class Doge: 
  def quack(self): 
    print "doge imitate duck." 
 
def in_the_forest(duck): 
  duck.quack() 
 
duck = Duck() 
bird = Bird() 
doge = Doge() 
for x in [duck, bird, doge]: 
  in_the_forest(x)
Copier après la connexion

Comme un autre exemple,
piratons le flux de sortie.

import sys 
 
sys.stdout = open('stdout.log', 'a') #只要是file-like,不管是什么类型 
print 'foo' 
 
sys.stdout = sys.__stdout__ #恢复 
print 'bar'
Copier après la connexion

De cette façon, le flux de sortie est écrit dans le fichier.

Pour des explications plus détaillées sur la programmation du duck typing et les articles liés à l'implémentation de Python, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal