python 24 封装、多态
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 封装、多态的更多相关文章
- python之面向对象性封装,多态,以及鸭子类型
默认类型 class A: class_name = 'python23期' def __init__(self, name, age): self.name = name self.age =age ...
- 二十四. Python基础(24)--封装
二十四. Python基础(24)--封装 ● 知识结构 ● 类属性和__slots__属性 class Student(object): grade = 3 # 也可以写在__slots ...
- python面向对象-封装and多态
python 接口类和抽象类 为什么讲封装之前要将这个东西? 我才不会说为什么 首先: python没有接口类这个概念!!!!!!!! 哈哈哈......神经病 python抽象类和接口类更接近于一种 ...
- Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)
Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: 将一些东西封装到一个地方,你还可以取出来( ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
- 将Python脚本封装成exe可执行文件 转
将Python脚本封装成exe可执行文件 http://www.cnblogs.com/renzo/archive/2012/01/01/2309260.html cx_freeze是用来将 Pyt ...
- Python 面向对象5 多态
一.多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作,简单的说就是一句话:允许将 ...
- python 静态 封装 继承 mro 接口 super
1.静态属性 静态方法 类方法 #!/usr/bin/python env # encoding: utf-8 # 静态属性 静态方法 class Room: tag = 168 def __ini ...
- Python面向对象之多态
多态 面向对象三大特性 封装 根据职责将属性和方法封装到一个抽象的类中:--定义类的准则 继承 实现代码的重用,相同的代码不需要重复的编写:--设计类的技巧:子类针对自己的需求,编写特定的代码: 多态 ...
随机推荐
- 三、SQL server 2008数据库的备份与还原
一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库:Dsi ...
- CentOS 下编译安装PHP
1. 去php官网下载源码 http://www.php.net/downloads.php ,我下载使用的版本是(php-5.4.8.tar.gz) 2. 安装环境 yum install ...
- PHP--数据库访问(增、删、改、查)
练习通过数据库查询一个表,操作这个表的增.删.改.查的功能! 一.主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...
- Android CHM文件阅读器
CHM格式是1998年微软推出的基于HTML文件特性的帮助文件系统.以替代早先的winHelp帮助系统,它也是一种超文本标识语言.在Windows 98中把CHM类型文件称作“已编译的HTML帮助文件 ...
- 林大妈的JavaScript基础知识(三):JavaScript编程(1)对象
1. 对象的简单介绍与一些注意事项 JavaScript中具有几个简单数据类型:数字.字符串.布尔值.null值以及undefined值.除此之外其余所有值(包括数组.函数,甚至正则表达式)都是对象. ...
- [Hei.Captcha] Asp.Net Core 跨平台验证码实现
写在前面 说起来比较丢脸.我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是System.Drawing,我把这验证码绘制逻辑复 ...
- Selenium+java - 下拉框处理
常见下拉框也分两种:一种是标准控件和非标准控件(一般为前端开发人员自己封装的下拉框),本篇文章中将重点讲解标准下拉框操作. 1.Select提供了三种选择某一项的方法 select.selectByI ...
- 使用Kubeadm创建k8s集群之节点部署(三十一)
前言 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案.不 ...
- DVWA-SQL注入
SQL注入解题思路 寻找注入点,可以通过web扫描工具实现 通过注入点,尝试得到连接数据库的用户名,数据库名称,权限等信息. 猜解关键数据库表极其重要字段与内容. 通过获得的用户信息寻找后台进行登录. ...
- Python 之父再发文:构建一个 PEG 解析器
花下猫语: Python 之父在 Medium 上开了博客,现在写了两篇文章,本文是第二篇的译文.前一篇的译文 在此 ,宣布了将要用 PEG 解析器来替换当前的 pgen 解析器. 本文主要介绍了构建 ...