面向对象的三大特征之一(多态)

- 多态是面向对象的三大特征之一
       多态从字面上理解是多种形态
       狗(狼狗、藏獒、哈士奇、古牧 。。。)
       一个对象可以以不同的形态去呈现

# 定义两个类
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入门三十二)相关推荐

  1. python第三十二课——队列

    队列:满足特点 --> 先进先出,类似于我们生活中的买票.安检 [注意] 对于队列而言:python中有为其封装特定的函数,在collections模块中的deque函数就可以获取一个队列对象; ...

  2. [Python人工智能] 三十二.Bert模型 (1)Keras-bert基本用法及预训练模型

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章结合文本挖掘介绍微博情感分类知识,包括数据预处理.机器学习和深度学习的情感分类.这篇文章将开启新的内容--Bert ...

  3. [Python图像处理] 三十二.傅里叶变换(图像去噪)与霍夫变换(特征识别)万字详细总结

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. [Python人工智能] 三十四.Bert模型 (3)keras-bert库构建Bert模型实现微博情感分析

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章开启了新的内容--Bert,首先介绍Keras-bert库安装及基础用法及文本分类工作.这篇文章将通过keras- ...

  5. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...

    SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...

  6. 深度学习入门(三十二)卷积神经网络——BN批量归一化

    深度学习入门(三十二)卷积神经网络--BN批量归一化 前言 批量归一化batch normalization 课件 批量归一化 批量归一化层 批量归一化在做什么? 总结 教材 1 训练深层网络 2 批 ...

  7. Reflex WMS入门系列三十二:导出到Excel

    Reflex WMS入门系列三十二:导出到Excel 如同SAP系统的风格 --- 凡是有list的界面,都能导出到Excel ---, Reflex WMS系统也提供了类似的功能.几乎在任何的Lis ...

  8. 三十二、Java集合中的ArrayList

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  9. 关于Python发布三十周年的纪念

    关于Python发布三十周年的纪念 Python编程的基础 关于Python发布三十周年的纪念 一.史海钩沉 源起 大事年表 二.编译型语言和解释型语言 编译型语言 解释型语言 三.Python 3和 ...

最新文章

  1. c语言将字母与数字分开存放,2017年计算机二级《C语言》考前提分试题及答案9...
  2. R包reshape2,轻松实现长、宽数据表格转换
  3. 深度学习在推荐系统上的应用
  4. kylin KV+cube方案分析
  5. 在现有k8s集群中安装kubesphere时报错:metrics-server failed
  6. Spark的基本原理
  7. 有赞九周年,打造技术生态,与开发者一起投身新零售浪潮
  8. html5 平移,Html5 canvas绘图旋转和平移
  9. 企业之经典《HSRP热备份路由协议高级配置》技术
  10. NXP MC9S12中断寄存器配置说明
  11. 协议解析-串口协议解析
  12. 78M05-ASEMI三端正线性稳压器78M05
  13. 怎么让照片里的人嘴巴动起来_让照片动起来软件下载-让照片动起来制作软件下载-西西软件下载...
  14. 奥斯汀大学计算机专业怎么样,德克萨斯大学奥斯汀分校计算机工程排名
  15. fastdb学习笔记
  16. keepalived健康检查
  17. 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【02】食物健脾
  18. 浅谈HTML5和H5区别
  19. FND_GLOBAL.CONC_REQUEST_ID = -1
  20. 微服务架构设计实践之七:业务架构

热门文章

  1. VirtualBox 上的windows XP启动时蓝屏
  2. 【新书推荐】【2018.05】电磁兼容性的计算方法
  3. 5月1日起施行,三种情形不予信用修复!
  4. Windows Mobile远程控制软件Pocket Controller Pro简介
  5. 凯恩帝绝对坐标清零_数控凯恩帝相对和绝对坐标怎么切换切换,求师傅
  6. 项目实训---微信小程序选座之7.7日报
  7. 安卓bochs模拟linux_bochs linux下载
  8. SpringBoot集成Dozer
  9. 关于Win7系统不能删除avast!
  10. 《秒懂EXCEL》重点复习笔记01