Python--面向對象特徵3一多態 一、多態 二、面向對象三大特徵小結

一、多態

多態是面向對象的三大特性之一,從字面上理解是多種形態。一個對象可以以不同的形態去呈現。

如狗(狼狗,泰迪,哈士奇...)

舉例如下:

#定義兩個類

class A:

def __init__(self,name):

self.__name = name

#getter和setter方法

    @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

#getter和setter方法

    @property

    def name(self):

return self.__name

@name.setter

    def name(self):

self.__name = name

#創建實例

a = A('蘇武')

b = B('李菜菜')

#定義一個函數

def say__hello(obj):

print('你好%s'%obj.name)

say__hello(a)

say__hello(b)

對於say__hello()這個函數來說,只要對象當中含有name屬性,它就可以作爲參數傳遞,對於這個函數並不會考慮對象的類型,只要有name屬性即可。

類型檢查

say__hello_2()中做一個類型檢查,也就是隻有obj是A類型的對象時,纔可以正常使用,其他類型的對象都無法使用該函數。這個函數就違反了多態。

--違反了多態的函數,只適用於一種類型的對象,無法處理其它類型的對象,這樣導致函數的適應性非常的差。像是 isinstance一般就不要使用。

def say_hello_2(obj):

if isinstance(obj,A):

print('你好 %s'%obj.name)

say_hello_2(b)

#鴨子類型

如果一個東西,走路像鴨子,叫聲像鴨子,那麼它就是鴨子。

例子len():

之所以一個對象能通過len()來獲取長度,是因爲對象中具有一個特殊方法__len__,換句話說,只要對象中具有__len__特殊方法,就可以通過len()來獲取它的長度。

l = [1,2,3]

s ='hello'

print(len(l))

print(len(s))

二、面向對象三大特徵小結

1.封裝

--確保對象中數據的安全

2.繼承

--保證了對象的可擴展性

3.多態

--保證了程序的靈活性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章