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. 多线程与高并发(五)final关键字

    final可以修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,我们先依次学习final的基础用法,然后再研究final关键字在多线程中的语义. 一.变量 变量,可以分为成员变量 ...

  2. Number() 与 parseInt()解析

    在 Python 中,将字符串转为整型变量的函数是 int() ,直接使用 int("123")就可以得到 123的输出结果,这样可以比较快速的得到我们想要的结果,在 js 中将 ...

  3. 计时器(Chronometer)、标签(TabHost)

    计时器(Chronometer) 方法 描述 public Chronometer(Context context)[构造方法] 创建Chronometer对象 public long getBase ...

  4. PHP与ECMAScript_7_流程控制

      PHP ECMAScript 顺序结构 默认从上到下依次执行 默认从上到下依次执行 分支结构 if  / switch if   /  switch 循环结构 for / while / do-w ...

  5. springBoot综合开发

    作者:纯洁的微笑出处:www.ityouknow.com 版权所有,欢迎保留原文链接进行转载:) 上篇文章介绍了Spring boot初级教程:spring boot(一):入门篇,方便大家快速入门. ...

  6. RobotFramework_4.SeleniumLibrary操作(二)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. 10w数组去重,排序,找最多出现次数(精华)

    package cn.tedu.javaweb.test; import java.util.*; /* * @author XueWeiWei * @date 2019/6/11 8:19 */@S ...

  8. java数组扩容

    有些时候使用数组代替栈,玩意数组容量不够需要扩容 则: 1.Array.toString();直接遍历打印数组 2.数组扩容采用Array.copyOf(),直接实现数组扩容功能,非常强大   (实际 ...

  9. set和map结构,class类

    1.set数据结构和map数据结构: (1)set: 数据结构set(集合,无序且值不能重复的数据集合,特点是key值和value值相同,没有重复的value //1 创建set ,,]) conso ...

  10. 【iOS】PLA 3.3.12

    发件人 Apple Program License Agreement PLA We found that your app uses the Advertising Identifier but d ...