一、多态的概念

多态指的是一类事物有多种形态.
动物有多种形态:人,狗,猪
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 多态.的更多相关文章

  1. DAY 25多态、反射、异常处理

    一.面向对象与面向过程分析 1.print(len('123')) # 面向过程 #清晰知道操作的功能,但不能明确操作的具体对象,需要传入参数. 2.print('123'.__len__()) # ...

  2. java多态概述特点转型I

    1 package face_09; 2 3 import com.sun.jdi.Method; 4 5 /* 6 * 对象的多态性. 7 * class 动物 8 * {} 9 * 10 * cl ...

  3. day7 面向对象编程

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...

  4. 10月25日上午PHP继承多态

    概念:子类可以继承父类的一切 方法重写:在子类里面对父类的方法进行重写,实现自己独特的功能.特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类.override重写(子类对父类的重写) ...

  5. day 25 面向对象之接口、抽象类、多态、异常处理、反射、断言

    复习 '''继承​1.父类:在类后()中写父类们class A:passclass B:passclass C(A, B):pass​2.属性查找顺序:自己 -> ()左侧的父类 -> 依 ...

  6. day 25 二十五、抽象类、多态、鸭子、反射、异常处理

    一.接口思想 1.接口:建立关联的桥梁,方便管理代码 python中没有接口语法 def jiao(): pass def chi(): pass def pao(): pass # 清晰知道操作的功 ...

  7. day24,25组合 封装 多态

    面向对象的精髓:将数据和处理数据的代码绑定成一个对象 只要获取到对象相应的数据和方法都有了 一.组合 什么叫组合? 多个对象放在一起叫组合 组合的作用也是降低代码的冗余 # 学生会增加各种各样的新的属 ...

  8. python基础(25):面向对象三大特性二(多态、封装)

    1. 多态 1.1 什么是多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import abc class Animal(metaclass=abc.ABCMeta): #同一类事 ...

  9. Objective-C中的继承和多态

    面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点.OC中和Java类似,不支持多重继承,但OOP语言C++就支持多 ...

随机推荐

  1. 21-js 实现评论时间格式转化

    js里面要用可以用伊尔表达式,循环是用js: document.getElementById("${pj.pltime }").innerHTML = dateToGMT(&quo ...

  2. 读书笔记---改善c#编程的157个建议

    1.在拼接string时,如果牵涉到其他类型,先tostring一下会减少装箱操作:频繁操作字符串变量的话,使用stringbuilder效率较高. 2.tryParse相对于parse而言效率高,t ...

  3. Qt中使用python--Hello Python!

    step1:install Python (version 2.7 or higher): step2:The configuration is as follows: 1.create qt con ...

  4. Java中弹出对话框中的几种方式

    1.显示一个错误对话框,该对话框显示的 message 为 'alert': JOptionPane.showMessageDialog(null, "alert", " ...

  5. src/lxml/includes/etree_defs.h:14:31: 致命错误:libxml/xmlversion.h:没有那个文件或目录

    fedora21平台下解决办法:yum install libxml-devel ubuntu下可以使用 apt-get intalll xxxx 如果仍然出现,可以尝试安装这两个包libxslt-d ...

  6. linq group by / distinct

    https://www.cnblogs.com/qixu/p/6033532.html http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062 ...

  7. NAND FLASH和LCD电路图

  8. RNA分析要点

    1. 有参与无参转录组分析 2. lncRNA分析 以RNA-Seq测序技术为基础的转录组测序作为高通量测序时代核心技术之一,已在生物科学及医学领域前沿研究中获得广泛应用.RNA-Seq可进行全基因组 ...

  9. pyspider示例代码四:搜索引擎爬取

    搜索引擎爬取 #!/usr/bin/env python # -*- encoding: utf- -*- # Created on -- :: # Project: __git_lab_fix fr ...

  10. java网络爬虫实现信息的抓取

    转载请注明出处:http://blog.csdn.NET/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...