Day 25 多态.



一、多态的概念
多态指的是一类事物有多种形态.
动物有多种形态:人,狗,猪
from abc import ABCMeta,abstractmethod
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
@abc.abstractmethod
def talk(self):
pass class People(Animal): #动物的形态之一:人
def talk(self):
print('say hello') class Dog(Animal): #动物的形态之二:狗
def talk(self):
print('say wangwang') class Pig(Animal): #动物的形态之三:猪
def talk(self):
print('say aoao')
from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta): #规范
@abstractmethod
def pay(self,money):
pass
raise NotImplemented
class ApplePay(Payment):#
def pay(self,money):pass
app = ApplePay() #微信支付
class Wechatpay(Payment):
def pay(self,money):
print('通过微信支付了%s元钱'%(money))
#支付宝支付
class Alipay(Payment):
def pay(self,money):
print('通过支付宝支付了%s元钱'%(money))
# apple pay
class Apple(Payment):
def pay(self,money):
print('通过评估支付了%s'%(money)) wp =Wechatpay()
wp.pay(100)
alp =Alipay()
app =ApplePay() def pay(pay_obj,money):#程序的归一化设计
pay_obj.pay(money) pay(alp,100)
pay(wp,100)
pay(app,100)
输出结果为
# 通过微信支付了100元钱
# 通过支付宝支付了100元钱
# 通过微信支付了100元钱
二、接口类
# 接口类是一个规范
# 多种支付方式,每一种支付方式都是一个类
# 每一个类中定义一个支付方法完成支付功能
# 由于每一种支付方法完成支付功能
# 由于每一种支付方式在程序中表现出来的都是支付类的对象
# 为了方便支付方法的调用
# 需要统一一个入口,pay函数
# interface
# 在python里没有接口类这种数据类型,没有接口类专门的语法
from abc import ABCMeta,abstractmethod
class FlyAnimal(metaclass=ABCMeta):
@abstractmethod
def fly(self):
print('111')
class SwimAnimal(metaclass=ABCMeta):
@abstractmethod
def swim(self):pass
class WalkAnimal(metaclass=ABCMeta):
@abstractmethod
def walk(self):pass
class Swan(SwimAnimal,WalkAnimal,FlyAnimal):
#飞
def fly(self):pass
#游泳
def swim(self):pass
#走
def walk(self):pass
class Qq(SwimAnimal,WalkAnimal):
#游泳
def swim(self):pass
#走
def walk(self):pass
class Bird(FlyAnimal,WalkAnimal):
#飞
def fly(self):pass
#走
def walk(self):pass
Swan()
接口类不能被实例化
三、抽象类
# 抽象类 ,规范一个类的类
# 在python里抽象类和接口类没有区别
# word 文档是文件
# excel是文件
# ppt是文件
from abc import ABCMeta, abstractmethod
class File(metaclass=ABCMeta):
@abstractmethod
def read(self):
f=open('file','r')
self.f =f
@abstractmethod
def write(self):
f = open('file','w')
class Word(File):
def read(self):
#打开一个文件
#读文件
#关闭一个文件
super().read()
self.f.read()
self.f.close()
class Excel (File):
def read(self):
#打开一个文件
#读某一列 读莫一列
#关闭一个文件
class PPT(File):
def read(self):
#打开一个文件
#读文字 读表格 读图片
#关闭一个文件
super().read()
self.f.readpicture()
self.f.close()
#
# 在java里 有区别
# java 的接口规定里面的方法一定不能实现(一句代码也不能写)
# 抽象类 单继承
无论接口类 还是抽象类 其实都是一种面向对象的编程的开发规范
# 只是在接口类或者抽象类中去约束继承他的子类必须实现某些方法
对于java代码来说:如果发生多继承,那么一定是接口类 且里面的方法都不能实现
如果在方法里有了实现 那么一定是单继承 的抽象类
# 但是对于python来说 就没有这些约束
# #因为python没有接口的概念
# #对于类的继承 没有多继承的限制.
# 实际上abc模块是帮助我们实现抽象类的方法,只是我们用他来模仿接口类的效果了
# 在python中,只要metaclass =ABCMeta定义了抽象方法(@abctractmethod)
# #这个类就不能被实例化
# #你可以说他是一个抽象类. 四、鸭子类型 Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’
python程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象 也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。 例1:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法 例2:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系
#二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
class TxtFile:
def read(self):
pass def write(self):
pass class DiskFile:
def read(self):
pass
def write(self):
pass
Day 25 多态.的更多相关文章
- DAY 25多态、反射、异常处理
一.面向对象与面向过程分析 1.print(len('123')) # 面向过程 #清晰知道操作的功能,但不能明确操作的具体对象,需要传入参数. 2.print('123'.__len__()) # ...
- java多态概述特点转型I
1 package face_09; 2 3 import com.sun.jdi.Method; 4 5 /* 6 * 对象的多态性. 7 * class 动物 8 * {} 9 * 10 * cl ...
- day7 面向对象编程
编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...
- 10月25日上午PHP继承多态
概念:子类可以继承父类的一切 方法重写:在子类里面对父类的方法进行重写,实现自己独特的功能.特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类.override重写(子类对父类的重写) ...
- day 25 面向对象之接口、抽象类、多态、异常处理、反射、断言
复习 '''继承1.父类:在类后()中写父类们class A:passclass B:passclass C(A, B):pass2.属性查找顺序:自己 -> ()左侧的父类 -> 依 ...
- day 25 二十五、抽象类、多态、鸭子、反射、异常处理
一.接口思想 1.接口:建立关联的桥梁,方便管理代码 python中没有接口语法 def jiao(): pass def chi(): pass def pao(): pass # 清晰知道操作的功 ...
- day24,25组合 封装 多态
面向对象的精髓:将数据和处理数据的代码绑定成一个对象 只要获取到对象相应的数据和方法都有了 一.组合 什么叫组合? 多个对象放在一起叫组合 组合的作用也是降低代码的冗余 # 学生会增加各种各样的新的属 ...
- python基础(25):面向对象三大特性二(多态、封装)
1. 多态 1.1 什么是多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import abc class Animal(metaclass=abc.ABCMeta): #同一类事 ...
- Objective-C中的继承和多态
面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点.OC中和Java类似,不支持多重继承,但OOP语言C++就支持多 ...
随机推荐
- JSP标准标签库JSTL
1.什么是JSTL? JSP标准标签库(JSP Standard Tag Library) 2.JSTL标准标签库中的常用标签 JSTL是JSP页面的标签库,实质上是一段Java代码.我们常用的是它的 ...
- 注册带有Portal功能的DYN365_ENTERPRISE_PLAN1地址
使用官方进入的注册页面注册后试用,发现没有Portal功能. https://trials.dynamics.com/Dynamics365/Signup 使用以下的地址注册可以产生Portal ht ...
- PAT 1079 延迟的回文数(代码+思路)
1079 延迟的回文数(20 分) 给定一个 k+1 位的正整数 N,写成 ak⋯a1a0 的形式,其中对所有 i 有 0≤ai<10 且 ak>0.N 被称 ...
- msys2 启用windows PATH环境变量
有三种方法修改 ①msys2_shell.cmd 中取消一行的注释:set MSYS2_PATH_TYPE=inherit ②调用msys2_shell.cmd时使用-use-full-path参数 ...
- 2018.07.03 HDU Rikka with Phi(线段树)
Rikka with Phi Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) P ...
- 2018.08.30 NOIP模拟 kfib(矩阵快速幂+exgcd)
[输入] 一行两个整数 n P [输出] 从小到大输出可能的 k,若不存在,输出 None [样例输入 1] 5 5 [样例输出] 2 [样例解释] f[0] = 2 f[1] = 2 f[2] = ...
- s28 LNMP架构服务搭建
nginx-location使用 location语法 location使用的语法例子为: location [=|~|~*|^~] uri{ 对location语法列表说明. |1ocation | ...
- origin里用c语言编程
学习自白东升老师的origin8.0课程. 其实是originC语言.origin中大多绘图和处理功能都是originC语言完成的,可以同时按下ctrl和shift然后点击相应的功能,就会出现每个按钮 ...
- HDU 1009 FatMouse' Trade (贪心算法)
题意:就是老鼠要用猫粮换粮食,第i个房间一些东西,要用东西去换,可以不全换.问给定的猫粮最多能换多少粮食. 析:贪心算法.我们先算出来每个房间物品的平均价格是多少,肯定越低越好,并且如果能全换就全换, ...
- 用node.js写个在Bash上对字符串进行Base64或URL的encode和decode脚本
一:自己这段时间经常要用到Base64编码和URL编码,写个编译型语言有点麻烦干脆就用node.js弄了个,弄好后在/etc/profile里加上alias就能完成工具的配置,先上代码: functi ...