1. 封装、多态

封装:将代码、数据放入一个容器空间中,并且可以使用.

多态:一个事物可以呈现多种形态。

python默认支持多态,一个变量可以指向多种数据类型。

2. 鸭子类型--Duck typing

python崇尚鸭子类型(编码思路)。

"鸭子类型"像多态一样工作,但是没有继承。

看起来像“鸭子”,其实就是“鸭子”;
定义:A、B类没有耦合性,但A、B类里面具有相同的方法,则称A、B互为“鸭子”,在某种意义上统一了标准。
虽然A、B两个类没有关系,但是统一两个类中相似方法的方法名,在某种意义上统一了标准。
例如:字符串、列表、元组的index方法,名字相同,作用相似,但不是一个index。

3. 类的约束

# 方法一:python语言惯于使用的一种约束方式,在父类主动抛出错误
# raise Exception("主动报错"),放在父类中,前提是已制定了相应的规则 class Payment:
def pay(self,money):
raise Exception("子类要使用pay方法") # 主动抛出约束错误,如果子类不使用pay方法,报错 class QQpay(Payment): # 鸭子类型 def pay(self, money):
print(f"使用qq支付了{money}") class Alipay(Payment): def pay(self, money):
print(f"使用阿里支付{money}") class Wechat(Payment): def pay(self, money):
# def zhifu(self,money): # 会报错
print(f"使用微信支付{money}") def pay(obj, money):
obj.pay(money) # 归一化设计:统一接口 obj1 = QQpay()
obj2 = Alipay()
obj3 = Wechat() pay(obj1, 100)
pay(obj2, 200)
pay(obj3, 300)
# 方法二:借鉴于Java语言,定义抽象类的概念,做到真正的强制约束
# 抽象类、接口类:强制在父类指定规则、规范 from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta):
@abstractmethod # 强制约束错误,当实例化对象时,子类没有pay方法就会报错
def pay(self,money):
pass class QQpay(Payment): # 鸭子类型 def pay(self, money):
print(f"使用qq支付了{money}") class Alipay(Payment): def pay(self, money):
print(f"使用阿里支付{money}") class Wechat(Payment): def pay(self, money): # 当没有pay时会报错
print(f"使用微信支付{money}") def pay(obj, money): # 归一化设计:统一接口
obj.pay(money) obj1 = QQpay()
obj2 = Alipay()
obj3 = Wechat() pay(obj1, 100)
pay(obj2, 200)
pay(obj3, 300)

5. super深度剖析

super().方法()
按照self对象从属于类的mro顺序,执行此类的下一个类的方法(跳出本类)。

python 24 封装、多态的更多相关文章

  1. python之面向对象性封装,多态,以及鸭子类型

    默认类型 class A: class_name = 'python23期' def __init__(self, name, age): self.name = name self.age =age ...

  2. 二十四. Python基础(24)--封装

    二十四. Python基础(24)--封装 ● 知识结构   ● 类属性和__slots__属性 class Student(object):     grade = 3 # 也可以写在__slots ...

  3. python面向对象-封装and多态

    python 接口类和抽象类 为什么讲封装之前要将这个东西? 我才不会说为什么 首先: python没有接口类这个概念!!!!!!!! 哈哈哈......神经病 python抽象类和接口类更接近于一种 ...

  4. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  5. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  6. 将Python脚本封装成exe可执行文件 转

    将Python脚本封装成exe可执行文件 http://www.cnblogs.com/renzo/archive/2012/01/01/2309260.html  cx_freeze是用来将 Pyt ...

  7. Python 面向对象5 多态

    一.多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作,简单的说就是一句话:允许将 ...

  8. python 静态 封装 继承 mro 接口 super

    1.静态属性 静态方法  类方法 #!/usr/bin/python env # encoding: utf-8 # 静态属性 静态方法 class Room: tag = 168 def __ini ...

  9. Python面向对象之多态

    多态 面向对象三大特性 封装 根据职责将属性和方法封装到一个抽象的类中:--定义类的准则 继承 实现代码的重用,相同的代码不需要重复的编写:--设计类的技巧:子类针对自己的需求,编写特定的代码: 多态 ...

随机推荐

  1. 【Gym - 101002F】Mountain Scenes(dp)

    Mountain Scenes Descriptions 给你一个长度为n的丝带,一个宽w一个高h 的 格子,用丝带去填充格子,这填充后只需要满足至少有一列的丝带长度与其他格子不同即可.丝带可以不全部 ...

  2. JavaScript ES6 Promiss对象

    说明 Node.js中,以异步(Async)回调著称,使用了异步,提高了程序的执行效率,但是,代码可读性较差的. 假如有几个异步操作,后一个操作需要前一个操作的执行完毕之后返回的数据才能执行下去,如果 ...

  3. .NET开发框架(八)-服务器集群之网络负载平衡演示(视频)

    (有声视频-服务器集群之负载平衡-NLB演示) 观看NLB视频的童鞋,都会继续观看IIS的负载平衡教程,点击>> 本文以[图文+视频],讲解Windows服务器集群的网络负载平衡NLB的作 ...

  4. Web访问原理-从输入URL到页面加载完成的过程中都发生了什么事情?

    从输入URL到页面加载完成的过程中都发生了什么事情?--这是一个经典的面试题: 主要是关于计算机网络方面的知识基础,对于非科班计算机自学web开发的同学可能理解起来就很困难. StackOverFlo ...

  5. javaweb入门--web是什么

    WEB基本概念 首先明白web是什么,人们常说的web其实就是英文中页面的意思,准确来说是Internet主机供给外界访问的资源. 站在用户视角,也就是说,通过你浏览器(客户端)的地址栏输入资源(你要 ...

  6. SSD+HDD 安装ubuntu16.04+win7双系统

    本人电脑是联想天逸100  前段时间把光驱拆了加了一个128G的SSD 顺便把SSD装上了win7  机械硬盘500G放资料和一般软件之类的   后来想要用到ubuntu  就在官网下载ubuntu1 ...

  7. java流压缩图片

    整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享.首先,要压缩的图片格式不能说动态图片,你可以使用bmp.png.gif等,至于压缩质量,可以通过BufferedImage来指定 ...

  8. 2019年一半已过,这些大前端技术你都GET了吗?- 下篇

    在上一篇文章中已经介绍了大前端关于状态管理.UI组件.小程序.跨平台和框架层的内容.在本文中,我会继续介绍编程语言.工程化.监控.测试和服务端,同时也会对下半年大前端可以关注的部分进行展望. 结合个人 ...

  9. 制造资源计划(Manufacturing Resource Planning,Mrp II)

        制造资源计划(Manufacturing Resource Planning,Mrp II)       概括: 以物料需求计划(MRP)为核心的企业生产管理计划系统,MRP II 是以工业工 ...

  10. 【React踩坑记四】React项目中引入并使用js-xlsx上传插件(结合antdesign的上传组件)

    最近有一个前端上传并解析excel/csv表格数据的需求. 于是在github上找到一个14K star的前端解析插件 github传送门 官方也有,奈何实在太过于浅薄.于是做了以下整理,避免道友们少 ...