我对Python还不熟悉。。。如果这能说明什么的话,它主要来自Java背景。
我试图理解Python中的多态性。也许问题是我希望我已经知道的概念能够投射到Python中。但我整理了以下测试代码:
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的{
False
True
我错过了什么?
菲莫和马克已经回答了你的问题。但这也是Python中多态性的一个例子,但它不像基于继承的例子那么明显。
Python中的
is
运算符检查这两个参数是否引用内存中的同一对象;它与C中的is
运算符不同。From the docs:
在这种情况下,您需要的是^{} 。
然而,惯用的Python要求您(几乎)永远不要进行类型检查,而是依赖duck-typing进行多态行为。使用
isinstance
来理解继承并没有什么错,但是通常应该在“生产”代码中避免它。尝试
isinstance(myDog, dog)
resp。isinstance(myDog, animal)
。相关问题 更多 >
编程相关推荐