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