python--面向对象—接口
开放封闭原则
依赖导致原则
接口隔离原则
继承多态
抽象类和接口类
编程思想:为子类做规范
归一化设计:几个类都实现了相同的方法
抽象类:最好单继承,且可以简单的实现功能
接口类:可以多继承,且最好不实现具体功能
实现接口类和抽象类的语法
from abc import abstractclassmethod,ABCMeta
class Xx(metaclass=ABCMeta):
@abstractclassmethod
def Yy():pass
钻石继承问题
python的新式类,和经典类在继承顺序上的不同
新式类:广度优先
查看继承顺序 子类名.mro()
经典类:深度优先
新式类和经典类的区别:定义阶段,经典类有object新式类不用,子类执行父类中的同名方法上,继承问题
多态
python天生支持多态
接口类
class Applepay:
def payment(self,money):
print('苹果 支付了%d元'%money)
class Alipay:
def payment(self,money):
print('支付宝 支付了%d元'%money)
def payment(pay_obj,money):
pay_obj.payment(money)
apple=Applepay()
ali=Alipay()
payment(apple,100)
payment(ali,100)
归一化设计
from abc import abstractmethod,ABCMeta
class Payment(metaclass=ABCMeta): #抽象类/接口类
@abstractmethod #给接口类加装饰器
def payment(self,money):pass
class Applepay(Payment):
def payment(self,money):
print('苹果 支付了%d元'%money)
def payment(pay_obj,money):
pay_obj.payment(money)
class Alipay(Payment):
def payment(self,money):
print('支付宝 支付了%d元'%money)
def payment(pay_obj,money):
pay_obj.payment(money)
class We(Payment):
def fuqian(self,money)
print('微信支付了%d元'%money)
apple=Applepay()
ali=Alipay()
we=We()
payment(apple,100)
payment(ali,100)
payment(we,100)
这样的话,如果子类里面没有要用的方法的话,在实例化对象的时候就会报错
如果有这个方法的话,实例化和使用的时候都不会报错。
主要是用来限制和规定某一类必须要用到某个方法
归一化设计:
1.接口类 不实现具体的方法,并且可以多继承
2.实现具体内容,做一些基础实现,并且不推荐多继承
多继承
from abc import abstractclassmethod,ABCMeta
class Fly_Animal(metaclass=ABCMeta):
@abstractclassmethod #限制必须用fly方法
def fly(self):
print('飞')
class Walk_Animal:
def walk(self):
print('走')
class Swim_Animal:
def swim(self):
print('游泳')
class Tiger(Walk_Animal):
def si(self):
pass
class Tiane(Walk_Animal,Swim_Animal,Fly_Animal): #多继承
def fly(self):
super().fly()
class Qingwa(Walk_Animal,Swim_Animal):
def fd(self):
pass
tiane=Tiane()
tiane.fly()
多继承限制
class D:
def test(self):
print('D')
class B(D): #B要是没有找D
def test(self):
print('B')
class C(D):
def test(self):
print('C')
class A(B,C):
pass
# def test(self): #如果没有就去找B,B和D都没有再C
# print('A')
a=A()
a.test()
深度优先↑ 新式类广度优先
所有类继承的基类object新式类 python3中不用强制继承
.mro()看顺序
python--面向对象—接口的更多相关文章
- python面向对象(四)之抽象类与接口
学过java的应该知道java有抽象类和接口的那么python呢?(以前写的关于java抽象类的笔记java抽象类与接口) python作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现 ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- Python面向对象之接口类(抽象类)
Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异
1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html 1.__init__() 创建对 ...
- python 面向对象进阶之内置方法
一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...
- Python 面向对象之反射
Python 面向对象之反射 TOC 什么是反射? hasattr getattr setattr delattr 哪些对象可以使用反射 反射的好处 例子一 例子二 什么是反射? 程序可以访问.检查和 ...
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
- Python面向对象编程(下)
本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...
- Python面向对象-day07
写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...
随机推荐
- HDU-2448 Mining Station on the Sea
先根据不同的起点跑最短路,记录距离,从而建立二分图求最小匹配. 一开始我求最短路的时候我把港口直接加到图中,然后发现进了港口就不能出来了,所以连接港口的边就要从双向边改成单向边…………这也搞得我n和m ...
- 刷题总结——Middle number(ssoj 优先队列)
题目: 给定一个整数序列··有两个操作: add x,表示序列中加入x mid 表示询问这个序列的中位数 原始序列数量n<=100000,操作数m<=10000 题解: 这道题可以直接用权 ...
- 算法复习——数位dp
开头由于不知道讲啥依然搬讲义 对于引入的这个问题,讲义里已经很清楚了,我更喜欢用那个建树的理解···· 相当于先预处理f,然后从起点开始在树上走··记录目前已经找到了多少个满足题意的数k,如果枚举到第 ...
- 当axios需要传送application/x-www-form-urlencoded格式参数的问题
我发送出去的数据发现后台接收不到,查找了一下原因,发现需要form-data的数据后台才可以获取到.于是改成了form-data格式,成功了,后台获取到数据了,有点小激动,但是随即发现发送的数据格式出 ...
- How to debug Android Native Application with eclipse
This blog is inspired by this tutorial http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-a ...
- static变量的生命周期
static生命周期 2011-07-15 16:01 静态变量的类型说明符是static.静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式, ...
- (转):从内核代码聊聊pipe的实现
来源: http://luodw.cc/2016/07/09/pipeof/ 用linux也有两年多了,从命令,系统调用,到内核原理一路学过来,我发现我是深深喜欢上这个系统:使用起来就是一个字&quo ...
- IC 拔取器 rework station
- gerrit 安装
http://blog.csdn.net/ljchlx/article/details/21988471
- yii 数据库添加,修改,删除相关操作总结
yii中关于数据信息的添加数据,修改数据,删除数据的相关操作,刚刚学习没几天,仅记录了一些,以后慢慢再充实,有需要的朋友可以看看. 添加数据的方法 (1)save 方法(对象形式操作) $user=n ...