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.面向过程 核心 ...
随机推荐
- 【bzoj1283】序列 线性规划与费用流
题目描述 给出一个长度为 的正整数序列Ci,求一个子序列,使得原序列中任意长度为 的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和最大. 输入 第1行三个数N,m,k. ...
- BZOJ 4821 [Sdoi2017]相关分析 ——线段树
打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ...
- BZOJ3697 采药人的路径 【点分治】
题目 采药人的药田是一个树状结构,每条路径上都种植着同种药材. 采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳性的. 采药人每天都要进行采药活动.他选择的路径 ...
- 【CCF】网络延时 树搜索
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- Tomcat和JVM的性能调优总结
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...
- linux centos7无法连接ssh
在centos7连接ssh时,参考了以下博文,终于完美解决 https://blog.csdn.net/trackle400/article/details/52755571 1. 首先,要确保Ce ...
- 完全平方数(bzoj 2440)
Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ...
- Microsoft发布新一代主机:Xbox One
当 Xbox One 这个名字从 Microsoft 高管 Don Mattrick 口中被念出来时,现场直接沸腾了.按照 Mattrick 的说法这是一款 all-in-one 的主机,而其核心价值 ...
- 通过jQuery Ajax提交表单数据时同时上传附件
1.使用场景:需要使用ajax提交表单,但是提交的表单里含有附件上传 2.代码实现方式: <!-- HTML代码 --> <form method="post" ...
- Socks5代理Socks5 Proxy
Socks5代理Socks5 Proxy Socks5代理是基于Socks协议的一种代理模式.其中,5表示该协议的版本号.它可以让局域网的计算机通过socks5代理服务器,访问外网的内容.由于它工 ...