How does polymorphism work in Python?
我是Python的新手…来自大部分Java背景,如果这说明了什么。
我试图理解Python中的多态性。也许问题在于我期待着我已经知道的概念能够投射到Python中。但我将以下测试代码组合在一起:
1 2 3 4 5 6 7 8 9 | class animal(object): "empty animal class" class dog(animal): "empty dog class" myDog = dog() print myDog.__class__ is animal print myDog.__class__ is dog |
从我使用的多态性(例如Java的EDCOX1(0)),我希望这两个语句都能打印正确,因为狗的实例是动物,也是狗。但我的输出是:
1 2 | False True |
我错过了什么?
python中的
来自文档:
The operators is and is not test for object identity: x is y is true if and only if x and y are the same object. x is not y yields the inverse truth value.
在这种情况下,您需要的是
Return true if the object argument is an instance of the classinfo argument, or of a (direct or indirect) subclass thereof.
1 2 3 4 5 6 7 8 9 | >>> class animal(object): pass >>> class dog(animal): pass >>> myDog = dog() >>> isinstance(myDog, dog) True >>> isinstance(myDog, animal) True |
然而,惯用的python命令您(几乎)从不进行类型检查,而是依赖duck类型来实现多态行为。使用
菲穆厄和马克回答了你的问题。但这也是Python中多态性的一个例子,但是它不像基于继承的例子那样明确。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class wolf(object): def bark(self): print"hooooowll" class dog(object): def bark(self): print"woof" def barkforme(dogtype): dogtype.bark() my_dog = dog() my_wolf = wolf() barkforme(my_dog) barkforme(my_wolf) |
试一下