多态(Python入门三十二)
面向对象的三大特征之一(多态)
- 多态是面向对象的三大特征之一
多态从字面上理解是多种形态
狗(狼狗、藏獒、哈士奇、古牧 。。。)
一个对象可以以不同的形态去呈现
# 定义两个类
class A:
def __init__(self,name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self,name):
self._name = name
class B:
def __init__(self,name):
self._name = name
def __len__(self):
return 10
@property
def name(self):
return self._name
@name.setter
def name(self,name):
self._name = name
class C:
pass
a = A('孙悟空')
b = B('猪八戒')
c = C()
# 定义一个函数
# 对于say_hello()这个函数来说,只要对象中含有name属性,它就可以作为参数传递
# 这个函数并不会考虑对象的类型,只要有name属性即可
def say_hello(obj):
print('你好 %s'%obj.name)
# 在say_hello_2中我们做了一个类型检查,也就是只有obj是A类型的对象时,才可以正常使用,
# 其他类型的对象都无法使用该函数,这个函数就违反了多态
# 违反了多态的函数,只适用于一种类型的对象,无法处理其他类型对象,这样导致函数的适应性非常的差
- 注意,向isinstance()这种函数,在开发中一般是不会使用的!
def say_hello_2(obj):
# 做类型检查
if isinstance(obj , A):
print('你好 %s'%obj.name)
# say_hello(b)
# say_hello_2(b)
# 鸭子类型
# 如果一个东西,走路像鸭子,叫声像鸭子,那么它就是鸭子
# len()
# 之所以一个对象能通过len()来获取长度,是因为对象中具有一个特殊方法__len__
# 换句话说,只要对象中具有__len__特殊方法,就可以通过len()来获取它的长度
l = [1,2,3]
s = 'hello'
# print(len(l))
# print(len(s))
print(len(b))
print(len(c))
面向对象的三大特征:
封装
- 确保对象中的数据安全
继承
- 保证了对象的可扩展性
多态
- 保证了程序的灵活性
多态(Python入门三十二)相关推荐
- python第三十二课——队列
队列:满足特点 --> 先进先出,类似于我们生活中的买票.安检 [注意] 对于队列而言:python中有为其封装特定的函数,在collections模块中的deque函数就可以获取一个队列对象; ...
- [Python人工智能] 三十二.Bert模型 (1)Keras-bert基本用法及预训练模型
从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章结合文本挖掘介绍微博情感分类知识,包括数据预处理.机器学习和深度学习的情感分类.这篇文章将开启新的内容--Bert ...
- [Python图像处理] 三十二.傅里叶变换(图像去噪)与霍夫变换(特征识别)万字详细总结
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- [Python人工智能] 三十四.Bert模型 (3)keras-bert库构建Bert模型实现微博情感分析
从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章开启了新的内容--Bert,首先介绍Keras-bert库安装及基础用法及文本分类工作.这篇文章将通过keras- ...
- python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...
SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...
- 深度学习入门(三十二)卷积神经网络——BN批量归一化
深度学习入门(三十二)卷积神经网络--BN批量归一化 前言 批量归一化batch normalization 课件 批量归一化 批量归一化层 批量归一化在做什么? 总结 教材 1 训练深层网络 2 批 ...
- Reflex WMS入门系列三十二:导出到Excel
Reflex WMS入门系列三十二:导出到Excel 如同SAP系统的风格 --- 凡是有list的界面,都能导出到Excel ---, Reflex WMS系统也提供了类似的功能.几乎在任何的Lis ...
- 三十二、Java集合中的ArrayList
@Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...
- 关于Python发布三十周年的纪念
关于Python发布三十周年的纪念 Python编程的基础 关于Python发布三十周年的纪念 一.史海钩沉 源起 大事年表 二.编译型语言和解释型语言 编译型语言 解释型语言 三.Python 3和 ...
最新文章
- c语言将字母与数字分开存放,2017年计算机二级《C语言》考前提分试题及答案9...
- R包reshape2,轻松实现长、宽数据表格转换
- 深度学习在推荐系统上的应用
- kylin KV+cube方案分析
- 在现有k8s集群中安装kubesphere时报错:metrics-server failed
- Spark的基本原理
- 有赞九周年,打造技术生态,与开发者一起投身新零售浪潮
- html5 平移,Html5 canvas绘图旋转和平移
- 企业之经典《HSRP热备份路由协议高级配置》技术
- NXP MC9S12中断寄存器配置说明
- 协议解析-串口协议解析
- 78M05-ASEMI三端正线性稳压器78M05
- 怎么让照片里的人嘴巴动起来_让照片动起来软件下载-让照片动起来制作软件下载-西西软件下载...
- 奥斯汀大学计算机专业怎么样,德克萨斯大学奥斯汀分校计算机工程排名
- fastdb学习笔记
- keepalived健康检查
- 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【02】食物健脾
- 浅谈HTML5和H5区别
- FND_GLOBAL.CONC_REQUEST_ID = -1
- 微服务架构设计实践之七:业务架构