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. Cocos2d-x 3.x中自定义渲染功能

    1.第一种方法针对的是整个图层的渲染         重写visit()函数,并且在visit()函数中直接向CommandQueue添加CustomCommand,设置好回调函数.          ...

  2. linux初学者-正则表达式

      在windows中,是没有办法批量处理文件的,但是在linux系统中,可以通过命令直接处理一系列文件,这些文件的处理就需要用到正则表达式.这同样可以应用与目录. 1.处理多个文件 正则表达式中批量 ...

  3. java练习---7

    //程序员:罗元昊 2017.10.7 import java.util.Scanner; public class L { public static void main(String[] args ...

  4. supervisor指南

    1 安装 yum install -y supervisor 如果提示没有这个安装包,则需要添加epel源 wget -O /etc/yum.repos.d/epel.repo http://mirr ...

  5. ES 23 - 检索和过滤的区别 (query vs. filter)

    目录 1 filter与query示例 1.1 准备测试数据 1.2 搜索测试 2 filter与query的区别 2.1 相关度处理上的不同 2.2 性能上的对比 2.3 对比结论 本文以 ES 6 ...

  6. python中对多态的理解

    目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...

  7. 关于python中的特殊方法

    研究了几个小时,大概对python中的特殊方法一知半解,现在写写自己的理解,以及记录一些找到的资源.待自己有比较深入理解的时候,再来更新 https://docs.python.org/3/refer ...

  8. TensorFlow学习笔记——深层神经网络的整理

    维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”.因为深层神经网络是实现“多层非线性变换”最常用的一种方法,所以在实际中可以认为深度学习就是深度神经网络的代名词.从 ...

  9. centos开发环境安装

    执行 yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel ...

  10. Canvas动画(PC端 移动端)

    Canvas动画(PC端 移动端) 一,介绍与需求 1.1,介绍 canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3 ...