C++中的虚函数与多态,是很多C++面向对象程序设计的一个基础,在Python中,是否也存在多态和虚函数,答案是有的。看下面的这个例子
[python] view plain copy
from abc import ABCMeta, abstractmethod
class Base():
__metaclass__ = ABCMeta
def __init__(self):
pass
@abstractmethod
def get(self):
print "Base.get()"
pass
class Derive1(Base):
def get(self):
print "Derive1.get()"
class Derive2(Base):
def get(self):
print "Derive2.get()"
if name == '__main__':
b = Base()
b.get()
运行的时候,提示:
b = Base()
TypeError: Can't instantiate abstract class Base with abstract methods get
如果分别构建两个子类的对象,则
[python] view plain copy
if name == '__main__':
b = Derive1()
c = Derive2()
b.get()
c.get()
运行结果:
Derive1.get()
Derive2.get()
从上面的例子可以看出,代码已经具备C++中多态和虚函数的特点了
那么,Python是如何做到这点的?
1.abc module
在代码中,首先
[python] view plain copy
from abc import ABCMeta, abstractmethod
python 文档对于abc是这么定义的
This module provides the infrastructure for defining abstract base classes (ABCs) in Python
[python] view plain copy
metaclass = ABCMeta
Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class
关于metaclass的定义,可以参见http://jianpx.iteye.com/blog/908121
3.申明函数为虚函数
[python] view plain copy
@abstractmethod
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。