【发布时间】:2011-02-19 14:49:12
【问题描述】:
我是 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 的 instanceof),我希望这两个语句都打印为 true,因为 dog is an animal 和 是一只狗。但我的输出是:
False
True
我错过了什么?
【问题讨论】:
-
请注意,检查对象的类型与多态性相反。多态性对对象进行操作,无论其类型如何。
-
这个问题的前提是误解:
isinstance(myDog, animal)做了你想要的,myDog.__class__ is animal是错误的。同样在 Python 中,我们使用 MixedCase 作为类名,而使用 lower_case_with_underscores 作为对象名。所以你的类应该被称为Animal, Dog和你的对象my_dog, dog1等等。 -
真的你的问题标题应该是“如何测试一个对象是否是指定类或其子类的实例?” 但是检查一个对象的类与多态性相反,正如@dash-tom-bang 所说,它依赖于方法的存在、实现和做适当的事情(或引发适当的异常)。
-
@anjaneyulubatta505 链接失效。
-
@Idonknow 尝试阅读learnbatta.com/blog/python-polymorphism-62
标签: python polymorphism