首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python中的多态与虚函数

Python中的多态与虚函数

作者头像
py3study
发布2020-01-09 11:31:38
发布2020-01-09 11:31:38
2K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

   C++中的虚函数与多态,是很多C++面向对象程序设计的一个基础,在Python中,是否也存在多态和虚函数,答案是有的。看下面的这个例子

代码语言:javascript
代码运行次数:0
运行
复制
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

如果分别构建两个子类的对象,则

代码语言:javascript
代码运行次数:0
运行
复制
if __name__ == '__main__':
    b = Derive1()
    c = Derive2()
    b.get()
    c.get()

运行结果:

Derive1.get() Derive2.get()

从上面的例子可以看出,代码已经具备C++中多态和虚函数的特点了

那么,Python是如何做到这点的?

1.abc module

在代码中,首先

代码语言:javascript
代码运行次数:0
运行
复制
from abc import ABCMeta, abstractmethod

python 文档对于abc是这么定义的


This module provides the infrastructure for defining abstract base classes (ABCs) in Python

2. 声明 metaclass

代码语言:javascript
代码运行次数:0
运行
复制
__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.申明函数为虚函数

代码语言:javascript
代码运行次数:0
运行
复制
@abstractmethod

A decorator indicating abstract methods.

Using this decorator requires that the class’s metaclass is ABCMeta or is derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods and properties are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档