开放封闭原则
依赖导致原则
接口隔离原则
继承多态
抽象类和接口类
    编程思想:为子类做规范
 归一化设计:几个类都实现了相同的方法
 抽象类:最好单继承,且可以简单的实现功能
 接口类:可以多继承,且最好不实现具体功能
 实现接口类和抽象类的语法

 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--面向对象—接口的更多相关文章

  1. python面向对象(四)之抽象类与接口

    ​ 学过java的应该知道java有抽象类和接口的那么python呢?(以前写的关于java抽象类的笔记java抽象类与接口) python作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现 ...

  2. python面向对象编程 继承 组合 接口和抽象类

    1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...

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

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

  4. python 面向对象学习

    ------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...

  5. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

  6. python 面向对象进阶之内置方法

    一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...

  7. Python 面向对象之反射

    Python 面向对象之反射 TOC 什么是反射? hasattr getattr setattr delattr 哪些对象可以使用反射 反射的好处 例子一 例子二 什么是反射? 程序可以访问.检查和 ...

  8. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  9. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  10. Python面向对象-day07

    写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...

随机推荐

  1. POJ #1025 Department

    模拟题. 这题第一个障碍是现在少见的循环电梯 ('pater-noster' elevator) "The building has `pater-noster' elevator, i.e ...

  2. CentOS7 Failed to start iptables.解决方法

    Shit, CentOS怎么这么多bug.... 公司机房周日突然掉电,之前的Openstack环境就不能用了. 重新Run了一遍安装脚本,发现这个错误: iptables 咋又起不来了呢..... ...

  3. Installing Metasploit Framework on Ubuntu 14.04 LTS and Debian 7

    原文链接:http://www.darkoperator.com/installing-metasploit-in-ubunt/ This Guide covers the installation ...

  4. 【spring aop切面】基础使用教程

    package tpf.aspect; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFact ...

  5. 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 ...

  6. bzoj 2794 [Poi2012]Cloakroom 离线+背包

    题目大意 有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]). 再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得: 对于每个选 ...

  7. 【POJ1276】Cash Machine(多重背包单调队列优化)

    大神博客转载http://www.cppblog.com/MatoNo1/archive/2011/07/05/150231.aspx多重背包的单调队列初中就知道了但一直没(不会)写二进制优化初中就写 ...

  8. Atcoder CODE FESTIVAL 2017 qual B D - 101 to 010 dp

    题目链接 题意 对于一个\(01\)串,如果其中存在子串\(101\),则可以将它变成\(010\). 问最多能进行多少次这样的操作. 思路 官方题解 转化 倒过来考虑. 考虑,最终得到的串中的\(' ...

  9. Android上下文Context

    Android上下文Context介绍 在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中时刻的在与它打交道,例如:Service.BroadcastReceiv ...

  10. (6)C#事务处理

    为了方便移到了ADO.NET分类里 事务的主要特征是,任务要么全部完成,要么都不完成 事务常用于写入或更新数据库中的数据.将数据写入文件或注册表也可以使用事物. ADO.NET不支持跨越多个连接的事物 ...