多态|学习笔记

简介: 快速学习 多态

开发者学堂课程【Python 语言基础 3:函数、面向对象、异常处理:多态】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/601/detail/8754


多态


内容简介

一、多态的定义

二、面向对象的三大特征

 

一、多态的定义

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

多态从字面上理解是多重形态

一个对象可以以不同的形态去呈现

例如:定义两类

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.2 name = name

Class C:

pass

a = A( ‘孙悟空’)

b = B(‘猪八戒’)

c = C( )

 

1、定义一个函数

l对于 say_hello( ) 这个函数来说,只要对象中含有 name 属性,它就可以作为参数传递,这个函数并不会考虑对象的类型,只要有 name 属性即可,这就是多态。

def  say_hello(obj):

print(‘你好%s’%obj.name)

 

l 在 say_hello_2 中做了一个类型检查,只有 obj 是 A 类型的对象时,才可以正常使用,其他类型的对象都无法使用该函数,这个函数就违反了多态

l 注意:像 isinstance() 违反多态代码的这种函数,在开发中一般是不会使用的

def say_hello_2(obj):

#做类型检查

If  isinstance(obj  ,A)

print(‘你好%s’%obj.name)


l 违反了多态的函数,只适用于一种类型的对象,无法处理其他类型对象,这样导致函数的适应性非常差

 

2、理解多态:鸭子类型

l 如果一个东西,走路像鸭子,叫声像鸭子,那么它就是鸭子

l 有了多态以后方法、定义更加的灵活、参数不用考虑具体类型,只需要确保符合某个特征、某个属性、某个方法,只要符合某个特征,就可以使用多态。

 

3、举例 len()函数(多态最好的体现)

1 =[1,2,3]

S = ‘hello’

 

print(len(10))

print(len(s))

print(len(b))

l 之所以一个对象能通过 len()来获取长度,是因为对象中具有一个特殊的方法_  len_ 换句话说,只要对象中具有 _ len_ 特殊方法,就可以通过 len( )来获取它的长度.

 

二、面向对象的三大特征(所有面向对象的语言必须具备这三个特点)

1、封装:确保对象中的数据安全

2、继承:保证了对象的可扩展性

3、多态:保证了程序的灵活性,如果我们的方法、类型和概念绑定,函数的通用性将会降低,当具有了多态,函数便更加灵活

相关文章
|
SQL 前端开发 druid
5-TDengine集成SpringBoot,MyBatis,MyBatisPlus
5-TDengine集成SpringBoot,MyBatis,MyBatisPlus
4732 0
5-TDengine集成SpringBoot,MyBatis,MyBatisPlus
|
11月前
|
计算机视觉 Python
基于Dlib的人脸识别客户端(UI界面)
基于Dlib的人脸识别客户端(UI界面)
359 2
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
537 2
K8S的Service的LoadBanlance之Metallb解决方案
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
280 0
|
关系型数据库 MySQL 数据安全/隐私保护
mysql8.0.26忘记密码后重置(centos8)
mysql8.0.26忘记密码后重置(centos8)
501 2
|
JavaScript 前端开发
JavaScript——快速判断数组对象的值是否全部满足条件
JavaScript——快速判断数组对象的值是否全部满足条件
180 0
|
11月前
|
监控 安全 网络协议
|
Web App开发 缓存 前端开发
《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)
【5月更文挑战第8天】这篇文档介绍了如何在IE、Chrome和Firefox浏览器中处理不信任证书的问题。作者北京-宏哥分享了如何通过编程方式跳过浏览器的证书警告,直接访问不受信任的HTTPS网站。文章分为几个部分,首先简要介绍了问题背景,然后详细讲解了在Chrome浏览器中的两种方法,包括代码设计和运行效果,并给出了其他浏览器的相关信息和参考资料。最后,作者总结了处理此类问题的一些通用技巧。
387 2
|
10月前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
6193 30