多态|学习笔记

简介: 快速学习 多态

开发者学堂课程【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、多态:保证了程序的灵活性,如果我们的方法、类型和概念绑定,函数的通用性将会降低,当具有了多态,函数便更加灵活

相关文章
|
3月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
717 1
|
存储 索引
【数据结构】HashSet的底层数据结构
【数据结构】HashSet的底层数据结构
581 2
|
3月前
|
安全 Java
使用Java多态性进行数据类型转换
以上示范了如何通过多态性来执行安全有效地对于Java对象间相互之间进行正确方式与场合下正确格式与条件限定内对于各个层级关系内部成员及其功能调取与应有操作处理过程,并通过 `instanceof`关键字确保了程序运行期间遵循逻辑合理并符合预设规则条件限定内正常工作流程而无需担忧潜藏风险问题出现可能带来影响结果质量问题情况存在可能。
166 12
|
3月前
|
设计模式 Java
JAVA基础day08
本笔记系统梳理Java面向对象高级特性,涵盖接口、抽象类、多态、内部类、包、访问修饰符、final与static关键字及单例、工厂等设计模式,助力深入掌握Java核心编程思想。(238字)
156 1
|
3月前
|
安全 Java 编译器
Java基础学习day06
本节学习Java继承与多态核心概念:继承通过extends实现,子类可复用父类非私有成员,支持单继承与多层继承,遵循就近原则并可用super调用父类成员;方法重写需满足权限与返回值约束,常用于重写toString等。多态基于继承,实现父类引用指向子类对象,提升扩展性但无法直接访问子类独有方法,可通过instanceof安全类型转换。
175 2
|
算法 Java 程序员
最新Java基础系列课程--Day03-Java程序流程控制
最新Java基础系列课程--Day03-Java程序流程控制
151 0
|
Java API 容器
泛型机制与反射原理
泛型即可以理解为把数据类型作为参数,即参数化类型,用来提高代码的安全性,灵活性,避免类型转换。
182 0
泛型机制与反射原理
|
存储 算法
面试题:说一下HashMap和HashSet的实现原理?
面试题:说一下HashMap和HashSet的实现原理?
190 0
|
2天前
|
数据采集 人工智能 安全