Comment le polymorphisme de travail en Python?
Je suis nouveau sur Python... et venant principalement de Java arrière-plan, si ce qui compte pour rien.
J'essaie de comprendre le polymorphisme en Python. Peut-être le problème, c'est que je m'attends à des concepts que je connais déjà pour projet en Python. Mais j'ai mis en place le test code suivant:
class animal(object):
"empty animal class"
class dog(animal):
"empty dog class"
myDog = dog()
print myDog.__class__ is animal
print myDog.__class__ is dog
Du polymorphisme je suis utilisé (par exemple, java instanceof
), je m'attends à ces deux états à imprimer vrai, comme une instance de chien est un animal et aussi est un chien. Mais mon résultat est:
False
True
Ce qui me manque?
- Notez qu'en plus de la vérification de type de l'objet est à l'opposé de polymorphisme. Le polymorphisme est d'exploitation sur un objet quel que soit son type.
- Essayez readading learnbatta.com/blog/polymorphism-in-python-62
Vous devez vous connecter pour publier un commentaire.
La
is
opérateur en Python vérifie que les deux arguments se réfèrent au même objet en mémoire; il n'est pas comme lesis
opérateur en C#.À partir de la documentation:
Ce que vous cherchez dans ce cas est
isinstance
.Cependant, idiomatiques Python dicte que vous avez (presque) jamais de faire la vérification de type, mais plutôt s'appuyer sur en tapant duck pour le comportement polymorphique. Il n'y a rien de mal à utiliser le
isinstance
pour comprendre l'héritage, mais il doit généralement être évitée dans la "production" du code.object
vous pouvez également regarder laclassname.__mro__
tuple, mais vraiment, c'est plus utile pour des fins éducatives.phimuemue et Mark ont répondu à votre question. Mais c'est AUSSI un exemple de polymorphisme en Python, mais il n'est pas aussi explicite que votre héritage basé exemple.
Essayer
isinstance(myDog, dog)
resp.isinstance(myDog, animal)
.