python之接口继承
接口继承
接口继承就是(基类)父类定义好2个函数属性(接口),所有的子类必须有这2个函数属性,缺一不可,不是说省代码的,是用来做强制性约束的
基类里面的方法不用具体的实现,只是一个规范而已
1.1实现一个一切皆文件的概念
- class Disk:
- def read(self):
- pass
- def write(self):
- pass
- class Cdrom:
- def read(self):
- pass
- def write(self):
- pass
- class Mem:
- def read(self):
- pass
- def write(self):
- pass
1.2可以定义一个基类,对上面代码进行改进
- class Allfile:
- def read(self):
- pass
- def write(self):
- pass
- class Disk(Allfile):
- def read(self):
- print("disk read")
- def write(self):
- print("disk write")
- class Cdrom(Allfile):
- def read(self):
- print("cdrom read")
- def write(self):
- print("cdrom write")
- class Mem(Allfile):
- def read(self):
- print("mem read")
- def write(self):
- print("mem write")
1.3但是子类也可以不按照你规定的出牌,Mem就是不听话,他不定义write的函数属性,然后就会从父类找。父类里面又是pass
- class Allfile:
- def read(self):
- pass
- def write(self):
- pass
- class Disk(Allfile):
- def read(self):
- print("disk read")
- def write(self):
- print("disk write")
- class Cdrom(Allfile):
- def read(self):
- print("cdrom read")
- def write(self):
- print("cdrom write")
- class Mem(Allfile):
- def read(self):
- print("mem read")
- m1=Mem()
- m1.read()
- m1.write()
- C:\python35\python3.exe D:/pyproject/day25/接口继承.py
- mem read
1.4所以python就有一个专门的模块来实现这个强制性的约束子类,模块叫abc
导入模块abc,给父类2个属性加上装饰器之后,如果子类再少属性的话,就直接报错了,这样就强制性的约束了子类必须有父类的2个方法了
- import abc
- class Allfile(metaclass=abc.ABCMeta):
- @abc.abstractstaticmethod
- def read(self):
- pass
- @abc.abstractstaticmethod
- def write(self):
- pass
- class Disk(Allfile):
- def read(self):
- print("disk read")
- def write(self):
- print("disk write")
- class Cdrom(Allfile):
- def read(self):
- print("cdrom read")
- def write(self):
- print("cdrom write")
- class Mem(Allfile):
- def read(self):
- print("mem read")
- m1=Mem()
- TypeError: Can't instantiate abstract class Mem with abstract methods write
1.5当子类Mem也加上write这个方法之后就可以正常运行了
- import abc
- class Allfile(metaclass=abc.ABCMeta):
- @abc.abstractstaticmethod
- def read(self):
- pass
- @abc.abstractstaticmethod
- def write(self):
- pass
- class Disk(Allfile):
- def read(self):
- print("disk read")
- def write(self):
- print("disk write")
- class Cdrom(Allfile):
- def read(self):
- print("cdrom read")
- def write(self):
- print("cdrom write")
- class Mem(Allfile):
- def read(self):
- print("mem read")
- def write(self):
- print("mem write")
- m1=Mem()
- m1.read()
- m1.write()
- mem read
- mem write
python之接口继承的更多相关文章
- python定义接口继承类
zxq547 python定义接口继承类invalid syntax解决办法 1 2 3 4 5 6 7 class s_all(metaclass=abc.ABCMeta): #python ...
- python定义接口继承类invalid syntax解决办法
class s_all(metaclass=abc.ABCMeta): #python2.7用此方法定义接口继承 # __metaclass__ = abc.ABCMeta @abc.abstract ...
- python的类的继承-接口继承-归一化设计
1.先在子类本身找,如果子类没有,会去父类找 class Dad: '这个是爸爸类' money=10#Dad类的数据属性 def __init__(self,name): print("爸 ...
- python之路----继承的抽象类和接口类
抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...
- python 静态 封装 继承 mro 接口 super
1.静态属性 静态方法 类方法 #!/usr/bin/python env # encoding: utf-8 # 静态属性 静态方法 class Room: tag = 168 def __ini ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- python基础之继承派生、组合、接口和抽象类
类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承obj ...
- Python学习第十八课——继承,接口继承等
1.继承:字面意思 # 继承 : 字面意思 class father: pass class grandfather: pass class children(father): # 单继承 pass ...
- [技术学习]js接口继承
js是面向对象语言,但是js又缺乏了面向对象的诸多特性,比如继承,没有接口继承也没有父类继承,因此有时候需要人工来实现继承. 一.首先看下java中面向对象的继承: //定义类鸟类的飞行动作 inte ...
随机推荐
- 神奇的JAVA多态
以前理解了基本思想,这版本的演示和应用比较真实. 顺路下来抽象方法和类,接口,就顺理成章啦... JAVA文件放一块了,分别对照前一个帖子的文件名: ///////////////////////// ...
- 介绍一个不错的服务器综合监控工具脚本集aspersa
http://blog.csdn.net/jackyrongvip/article/details/9217869
- redis-不常用的命令
在不重启redis服务器的情况下,动态的修改Redis的配置 redis> config set loglevel warning
- hdu1018--斯特灵公式
斯特灵公式 Wiki http://zh.wikipedia.org/wiki/斯特林公式 /** \brief hdu 1018 * * \param date 2014/7/24 * \param ...
- Lua 与C/C++ 交互系列:注冊枚举enum到Lua Code中
在Lua Code中注冊C/C++的枚举很easy,就像注冊全局变量一样.我们使用枚举名称作为命名空间,来避免注冊的枚举发生冲突.注冊的枚举存储在全局环境(线程环境)中. 当在Lua Code中訪问枚 ...
- LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>
作者:史宁宁(snsn1984) LLVM最终有了一本系统的书了--<Getting Started with LLVM Core Libraries>. 这本书号称是LLVM的第一本书, ...
- PlayerPrefs存储Vector3等结构数据
孙广东 2016.3.31 之前有网友询问这个问题, 当时我仅仅是 提供了一个思路, 使用json序列化.反序列化. 以下就写出两种(都是仅仅能变成字符串) 1.json的序列化.反序列化方 ...
- Qt5.9 提供Qt Remote Objects,OAuth1 & OAuth2,重写了QML的GC
Technology Preview Modules Qt Remote Objects - A module that allows you to easily share QObject inte ...
- c17---指针
// // main.c // 指针基本概念 #include <stdio.h> // 基本数据类型作为函数的参数是值传递, 在函数中修改形参的值不会影响到外面实参的值 void cha ...
- ES Segment Memory——本质上就是segment中加到内存的FST数据,因此segment越多,该内存越大
ElasticSearch优化系列四:ES的heap是如何被瓜分掉的 转自:https://www.jianshu.com/p/f41b706db6c7 以下分别解读几个我知道的内存消耗大户: Seg ...