一、 什么是多态
<1>一种类型具有多种类型的能力
<2>允许不同的对象对同一消息做出灵活的反应
<3>以一种通用的方式对待个使用的对象
<4>非动态语言必须通过继承和接口的方式来实现
二、 python中的多态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
< 1 >通过继承实现多态(子类可以作为父类来使用)
< 2 >子类通过重载父类的方法实现多态
class Animal:
def move( self ):
print ( 'animal is moving....' )
class Dog(Animal):
pass
def move(obj):
obj.move()
>>>move(Animal())
>>>animal is moving....
>>>move(Dog())
>>>animal is moving....
class Fish(Animal):
def move( self ):
print ( 'fish is moving....' )
>>>move(Fish())
>>>fish is moving....
|
三、 动态语言和鸭子类型
<1>变量绑定的类型是不确定的
<2>函数和方法可以接收任何类型的参数
<3>调用方法时不检查提供的参数类型
<4>调用是否成功有参数的方法和属性确定,调用不成功则抛出错误
<5>不用实现接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
class P:
def __init__( self , x, y):
self .x = x
self .y = y
def __add__( self , oth):
return P( self .x + oth.x, self .y + oth.y)
def info( self ):
print ( self .x, self .y)
class D(P):
def __init__( self , x, y, z):
super .__init__(x, y)
self .z = z
def __add__( self , oth):
return D( self .x + oth.x, self .y + oth.y, self .z + oth.z)
def info( self ):
print ( self .x, self .y, self .z)
class F:
def __init__( self , x, y, z):
self .x = x
self .y = y
self .z = z
def __add__( self , oth):
return D( self .x + oth.x, self .y + oth.y, self .z + oth.z)
def info( self ):
print ( self .x, self .y, self .z)
def add(a, b):
return a + b
if __name__ = = '__main__' :
add(p( 1 , 2 ), p( 3 , 4 ).info())
add(D( 1 , 2 , 3 ), D( 1 , 2 , 3 ).info())
add(F( 2 , 3 , 4 ), D( 2 , 3 , 4 ).info())
|
四、 多态的好处
<1>可实现开放的扩展和修改的封闭
<2>使python程序更加的灵活
以上这篇老生常谈python之鸭子类和多态就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。