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.面向过程 核心 ...
随机推荐
- NOJ——1508火烧赤壁2(并查集+启发式合并+逆序加边)
[1508] 火烧赤壁2 时间限制: 1000 ms 内存限制: 65535 K 问题描述 上次出了一道火烧赤壁的题目给当时的新生,也就是你们的上一届学长们做,那么这次,我又想到了另一个想法. 上次的 ...
- AIX 常用命令 第一步(uname,lspv)
如何知道自己在运行单处理器还是多处理器内核? /unix 是指向已启动内核的符号链接.要了解正在运行什么内核模式,可输入 ls -l /unix 并查看 /unix 链接到什么文件.下面是 ls -l ...
- java面试之String源码中equals具体实现
废话不多说,直接看代码,注释已经写在上面了: public boolean equals(Object anObject) { if (this == anObject) {//比较两个对象的地址 r ...
- bzoj 2788 [Poi2012]Festival 差分约束+tarjan+floyd
题目大意 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1.给出a,b (1<=a,b<=n),要求满足Xa + 1 = Xb 2.给出c,d (1&l ...
- Yii使用find findAll查找出指定字段的实现方法
Yii使用find findAll查找出指定字段的实现方法,非常实用的技巧,需要的朋友可以参考下. 用过Yii的朋友都知道,采用如下方法: 查看代码 打印 1 modelName::model() ...
- MySQL创建存储过程/函数需要的权限
alter routine---修改与删除存储过程/函数 create routine--创建存储过程/函数 execute--调用存储过程/函数 下面有一篇介绍MySQL所有权限的博文 http:/ ...
- 输入框为数字类型时防止maxlength属性不起作用
<input type="number" oninput="if(value.length>5)value=value.slice(0,5)" /& ...
- mybatis trim
eg: select * from user <trim prefix="WHERE" prefixoverride="AND |OR"> < ...
- Linux终端颜色设置
http://blog.sina.com.cn/s/blog_65a8ab5d0101g6cf.html http://www.tuicool.com/articles/NRZfIj #PS1='${ ...
- 海量端口扫描工具masscan
海量端口扫描工具masscan masscan号称是互联网上最快的端口扫描工具,可以6分钟扫描整个互联网,每秒可以发送一百万个数据包.为了提高处理速度,masscan定制了TCP/IP栈,从而不影 ...