多态|学习笔记

简介: 快速学习 多态

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

相关文章
|
6月前
|
存储 设计模式 编译器
C++进阶之多态(下)
通过观察测试我们发现b对象是8bytes,除了_b成员,还多一个__vfptr放在对象的前面(注意有些平台可能会放到对象的最后面,这个跟平台有关),对象中的这个指针我们叫
|
9月前
|
C++
C++学习笔记_04抽象类、多态 2021-04-15
C++学习笔记_04抽象类、多态 2021-04-15
|
11月前
|
编译器 C++
【C++】多态学习总结
多态就是调用一个函数时,展现出多种形态。比如买火车票这件事,普通人是全价,学生是半价,这就是一种多态。 多态分为静态的多态和动态的多态:
|
7月前
|
Java
Java面向对象之多态
Java面向对象之多态
38 0
|
8月前
|
安全 Java 编译器
多态的学习
多态的学习
34 0
|
8月前
|
算法 C++ 索引
c++学习之多态
c++学习之多态
39 0
|
8月前
|
Java
Java面向对象多态
多态概述 Java 多态是指同一种类型的对象,在不同的情况下有着不同的状态和行为。它是基于继承、重写和向上转型等特性实现的,多态是面向对象编程的三大特征之一,其他两个分别是封装和继承。 Java 多态包括以下三种方式 方法重写(Override) 子类可以对从父类继承的方法进行重写,以便根据子类的需要来覆盖掉父类中的方法实现。这样在调用时,可以根据对象的不同来执行对应的方法。
47 0
|
11月前
|
Java
Java面向对象—多态
Java面向对象—多态
60 0
|
Java
Java面向对象三剑客之——多态
今天我们来学习Java多态的知识。在Java中,多态是一种强大的特性,它允许我们在运行时根据不同的对象类型来执行不同的操作,从而使代码更加灵活和可扩展。让我们来探索Java多态的奥秘!
88 0
|
C++
类和对象-多态
类和对象-多态
49 0
类和对象-多态