接口类和抽象类的界限比较模糊。

接口类

python原生是不支持的,支持多继承,接口类中的所有方法都必须不能实现,不能实例化

抽象类

python原生支持的,不支持多继承,抽象类中方法可以有一些代码实现。不能实例化。

class Wechat:def pay(self,money):print('微信支付')
class Alipay():def pay(self,money):print('支付宝支付')
def pay(pay_obj,money):pay_obj.pay(money)
wechat = Wechat()
ali = Alipay()
wechat.pay(100)
ali.pay(200)
#等价于
#pay(wechat,100)
#pay(ali,200)

上述中def pay(pay_obj,money):就统一了支付的入口。

from abc import abstractmethod,ABCMeta
class Payment(metaclass= ABCMeta): #metaclass表示一个元类,将自己写的父类方法设置为默认的元类@abstractmethoddef pay(self,money):raise NotImplemented  # 没有实现这个方法
#上述的Payment方法实现了一个规范,这个就是一个接口类,或者抽象类。class Wechat(Payment):def pay(self, money):print('微信支付')class Alipay(Payment):def pay(self, money):print('支付宝支付')class Applepay():def fuqian(self, money):print('Apple支付')def pay(pay_obj, money):pay_obj.pay(money)# wechat = Wechat()
# ali = Alipay()
apple = Applepay()
# wechat.pay(100)
# ali.pay(200)
# 等价于
# pay(wechat, 100)
# pay(ali, 200)
pay(apple,300)

接口类与抽象类的区别

接口类,多继承父类,同时继承的方法必须要写出来。如果不写,会报错。
再规定规则的时候,方法不需要实现,但是必须再子类中实现。

from abc import ABCMeta, abstractmethodclass swim_Animal(metaclass=ABCMeta):@abstractmethoddef swim(self):raise NotImplemented  # 没有实现这个方法class walk_Animal(metaclass=ABCMeta):@abstractmethoddef walk(self):raise NotImplemented  # 没有实现这个方法class fly_Animal(metaclass=ABCMeta):@abstractmethoddef fly(self):raise NotImplemented  # 没有实现这个方法class Eagle(walk_Animal, fly_Animal):def walk(self):print('go')def fly(self):print('fly')class Tiger(walk_Animal, swim_Animal):def walk(self):print('go')def swim(self):print('swin')class Swan(walk_Animal, swim_Animal, fly_Animal):def walk(self):print('go')def swim(self):print('swin')def fly(self):print('fly')s = Swan()
s.swim()

抽象类,也是一种规范,一般情况下,是单继承,都是能实现的功能都是一样的,所以可以再父类中有一些简单的基础实现。
多继承的情况,由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中。

import abc #利用abc模块实现抽象类class All_file(metaclass=abc.ABCMeta):all_type='file'@abc.abstractmethod #定义抽象方法,无需实现功能def read(self):'子类必须定义读功能'with open('filaname') as f:pass@abc.abstractmethod #定义抽象方法,无需实现功能def write(self):'子类必须定义写功能'passclass Txt(All_file): #子类继承抽象类,但是必须定义read和write方法def read(self):print('文本数据的读取方法')def write(self):print('文本数据的读取方法')class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法def read(self):print('硬盘数据的读取方法')def write(self):print('硬盘数据的读取方法')class Process(All_file): #子类继承抽象类,但是必须定义read和write方法def read(self):print('进程数据的读取方法')def write(self):print('进程数据的读取方法')

19 接口类和抽象类相关推荐

  1. Python面向对象之接口类(抽象类)

    Python面向对象之接口类(抽象类):就是制定一个规范.比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方法 ...

  2. 023_接口类,抽象类,多态,鸭子类型,封装

    1,接口类 1 class Wechat(): 2 def pay(self,money): 3 print('已经用微信支付了%s元'%money) 4 class Alipay(): 5 def ...

  3. Python设计模式二:接口类和抽象类(Python接口设计)

    系列文章目录 Python设计模式一:面向对象编程 文章目录 系列文章目录 前言 一.接口类和抽象类是什么? 基于接口编程而非实现 二.Python里如何实现接口类和抽象类? 三.接口类和抽象类的应用 ...

  4. Python学习日记(二十五) 接口类、抽象类、多态

    接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...

  5. php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别

    /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候 ...

  6. 接口类抽象类 封装

      接口类抽象类: 第一版,不好,没有统一化设计,第二版解决. class QQ:def pay(self,money):print('您用qq支付了%s元' % money)class Ali:de ...

  7. java接口构建英雄属性_Python接口类的多继承以及抽象类的单继承

    一.接口类(面向对象开发的思想和规范)的多继承 需求: 定义一个tiger类:会走,会游 定义一个hawk类:会走,会飞 定义一个swan类:会走,会游,会飞 (a)如果像以下代码的方式,则不能够满足 ...

  8. 接口可以继承抽象类吗_Python接口类的多继承以及抽象类的单继承

    一.接口类(面向对象开发的思想和规范)的多继承 需求: 定义一个tiger类:会走,会游 定义一个hawk类:会走,会飞 定义一个swan类:会走,会游,会飞 (a)如果像以下代码的方式,则不能够满足 ...

  9. 接口类的多继承以及抽象类的单继承

    接口类的多继承以及抽象类的单继承 一.接口类(面向对象开发的思想和规范)的多继承 需求: 定义一个tiger类:会走,会游 定义一个hawk类:会走,会飞 定义一个swan类:会走,会游,会飞 (a) ...

  10. 面向对象 抽象类与接口类

    ############  复习 ############### - 先抽象再继承 ########## 接口类与抽象类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码 ...

最新文章

  1. Github上AI在银行和保险的应用列表
  2. (转)轻量级 UML 建模工具JUDE 介绍(二)
  3. Can't get attribute '_rebuild_tensor_v2' on module 'torch._utils'
  4. 个人项目框架搭建 -- 缓存接口与实现
  5. 使用easyui框架form控件,单选按钮radio或复选框checkbox样式问题
  6. 关于mbzuai的offer的三点思考
  7. 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
  8. Django组件-中间件
  9. 将Excle数据导入到数据库
  10. 配置Jenkins以连续交付Spring Boot应用程序
  11. Matlab2017a(64位)安装包下载及详细安装步骤
  12. 怎么样把书上的字很快的弄成电子版
  13. 电脑重装系统后usbcleaner怎么格式化u盘
  14. 没想到!2018微信年度数据报告显示使用最多的表情竟是...
  15. 网易数据中台获评工信部2019“十佳大数据案例”
  16. 智慧城市行业领军企业一览表
  17. 微信开发者工具修改内存限制、皮肤等
  18. 方块消除 UVA10559
  19. 大盘点 | 2020年「21篇」医学影像算法最佳综述
  20. mysql修复损坏表_在MySQL中,如何修复损坏的表

热门文章

  1. 凿音下载 1.26 安卓版
  2. 模仿京东分类页面的布局
  3. piano+apk+android,PianOli | F-Droid - Free and Open Source Android App Repository
  4. iview 循环 卡片 更好图标 背景色 标题
  5. ERStudio8.0 破解版 下载 download
  6. intel服务器最新主板芯片组,英特尔服务器主板芯片组驱动程序
  7. c++使用librdkafka kerberos认证
  8. Mujoco-二阶单摆建模与控制
  9. 图像处理的空间频率(波数)、角波数与空间波长
  10. 软件需求分析——需求工程导论