Est-ce que c'est du canard en Python?
Voici de code Ruby:
class Duck
def help
puts "Quaaaaaack!"
end
end
class Person
def help
puts "Heeeelp!"
end
end
def InTheForest x
x.help
end
donald = Duck.new
john = Person.new
print "Donald in the forest: "
InTheForest donald
print "John in the forest: "
InTheForest john
Et, je l'ai traduit pour Python:
import sys
class Duck:
def help():
print("Quaaaaaack!")
class Person:
def help():
print("Heeeelp!")
def InTheForest(x):
x.help()
donald = Duck()
john = Person()
sys.stdout.write("Donald in the forest: ")
InTheForest(donald)
sys.stdout.write("John in the forest: ")
InTheForest(john)
Le résultat est le même. Est-ce à dire mon code Python est à l'aide en tapant duck? Je ne pouvais pas trouver un canard en tapant exemple, si je pensais qu'il n'y est peut-être pas en tapant duck en Python. Il est code dans Wikipedia, mais je ne pouvais pas le comprendre.
source d'informationauteur a1204773
Vous devez vous connecter pour publier un commentaire.
Le code ne montre pas toute l'histoire. Duck-typing est au sujet d'essayer quelque chose et la gestion des exceptions si elles se produisent. Aussi longtemps que des charlatans, le traiter comme un canard, au contraire, à les traiter différemment.
Ce comportement est expliqué en haut de la wikipédia Duck_typing article à la suite d'une description d'une non-canard-typée langue:
Dans un canard de type de langue, l'équivalent de la fonction serait de prendre un objet, de tout type et de l'appel de l'objet à pied et quack méthodes. Si l'objet n'ont pas les méthodes que l'on appelle alors la fonction des signaux d'une erreur d'exécution. Si l'objet possède les méthodes, puis ils sont exécutés peu importe le type de l'objet, en évoquant l'offre et donc le nom de cette forme de saisie.
Pour votre exemple:
de sortie:
Oui, c'est le duck-typing, qui code Python peut (et le fait souvent).
http://en.wikipedia.org/wiki/Duck_typing#In_Python
Plus haut sur la page, il y a un exemple plus complet en Python:
Lors de la définition d'une méthode en Python, vous devez fournir à l'objet sur lequel elle s'applique, ce qui, dans votre cas, est
self
.Par conséquent, vous devez adapter votre code avec la ligne suivante pour avoir le comportement attendu: