亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python之路【第十篇】:Python面向對象之多態、多態性

系統 1538 0

閱讀目錄

一 多態

多態指的是一類事物有多種形態

動物有多種形態:人,狗,豬

            import abc
class Animal(metaclass=abc.ABCMeta): #同一類事物:動物
    @abc.abstractmethod
    def talk(self):
        pass

class People(Animal): #動物的形態之一:人
    def talk(self):
        print('say hello')

class Dog(Animal): #動物的形態之二:狗
    def talk(self):
        print('say wangwang')

class Pig(Animal): #動物的形態之三:豬
    def talk(self):
        print('say aoao')
          

文件有多種形態:文本文件,可執行文件

            import abc
class File(metaclass=abc.ABCMeta): #同一類事物:文件
    @abc.abstractmethod
    def click(self):
        pass

class Text(File): #文件的形態之一:文本文件
    def click(self):
        print('open file')

class ExeFile(File): #文件的形態之二:可執行文件
    def click(self):
        print('execute file')
          

?

?

二 多態性

一 什么是多態動態綁定(在繼承的背景下使用時,有時也稱為多態性)

多態性是指在不考慮實例類型的情況下使用實例

?

            
              在面向對象方法中一般是這樣表述多態性:向不同的對象發送同一條消息(!!!obj.func():是調用了obj的方法func,又稱為向obj發送了一條消息func),不同的對象在接收時會產生不同的行為(即方法)。也就是說,每個對象可以用自己的方式去響應共同的消息。所謂消息,就是調用函數,不同的行為就是指不同的實現,即執行不同的函數。

比如:老師.下課鈴響了(),學生.下課鈴響了(),老師執行的是下班操作,學生執行的是放學操作,雖然二者消息一樣,但是執行的效果不同
            
          

?

多態性分為靜態多態性和動態多態性

  靜態多態性:如任何類型都可以用運算符+進行運算

  動態多態性:如下

            peo=People()
dog=Dog()
pig=Pig()

#peo、dog、pig都是動物,只要是動物肯定有talk方法
#于是我們可以不用考慮它們三者的具體是什么類型,而直接使用
peo.talk()
dog.talk()
pig.talk()

#更進一步,我們可以定義一個統一的接口來使用
def func(obj):
    obj.talk()
          

二 為什么要用多態性(多態性的好處)

其實大家從上面多態性的例子可以看出,我們并沒有增加什么新的知識,也就是說python本身就是支持多態性的,這么做的好處是什么呢?

1.增加了程序的靈活性

  以不變應萬變,不論對象千變萬化,使用者都是同一種形式去調用,如func(animal)

2.增加了程序額可擴展性

 通過繼承animal類創建了一個新的類,使用者無需更改自己的代碼,還是用func(animal)去調用?  

            >>> class Cat(Animal): #屬于動物的另外一種形態:貓
...     def talk(self):
...         print('say miao')
... 
>>> def func(animal): #對于使用者來說,自己的代碼根本無需改動
...     animal.talk()
... 
>>> cat1=Cat() #實例出一只貓
>>> func(cat1) #甚至連調用方式也無需改變,就能調用貓的talk功能
say miao

'''
這樣我們新增了一個形態Cat,由Cat類產生的實例cat1,使用者可以在完全不需要修改自己代碼的情況下。使用和人、狗、豬一樣的方式調用cat1的talk方法,即func(cat1)
'''
          

三 ?鴨子類型

逗比時刻:

  Python崇尚鴨子類型,即‘如果看起來像、叫聲像而且走起路來像鴨子,那么它就是鴨子’

python程序員通常根據這種行為來編寫程序。例如,如果想編寫現有對象的自定義版本,可以繼承該對象

也可以創建一個外觀和行為像,但與它無任何關系的全新對象,后者通常用于保存程序組件的松耦合度。

例1:利用標準庫中定義的各種‘與文件類似’的對象,盡管這些對象的工作方式像文件,但他們沒有繼承內置文件對象的方法

            #二者都像鴨子,二者看起來都像文件,因而就可以當文件一樣去用
class
            
               TxtFile:
    def
              
                 read(self):
        pass

    def
                
                   write(self):
        pass

class
                  
                     DiskFile:
    def
                    
                       read(self):
        pass
    def
                      
                         write(self): pass
                      
                    
                  
                
              
            
          

?

例2:其實大家一直在享受著多態性帶來的好處,比如Python的序列類型有多種形態:字符串,列表,元組,多態性體現如下

?

            #str,list,tuple都是序列類型
s=str('hello'
            
              )
l=list([1,2,3
              
                ])
t=tuple((4,5,6
                
                  ))

#我們可以在不考慮三者類型的前提下使用s,l,t
s.__len__
                  
                    ()
l.__len__
                    
                      ()
t.__len__
                      
                        () len(s) len(l) len(t)
                      
                    
                  
                
              
            
          

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 老外黑人欧美一级毛片 | 夜色私人影院永久入口 | 午夜一级精品免费毛片 | 日韩精品在线视频观看 | a中文字幕1区 | 免费看一级做a爰片久久 | 欧美日韩一区二区三 | 日日拍夜夜嗷嗷叫国产 | 中国一级特黄aa毛片大片 | 国内欧美一区二区三区 | 久久久久久久久久久9精品视频 | 日日噜噜噜夜夜爽爽狠狠图片 | 国产免费小视频 | 久久黄色一级视频 | 伊人精品在线视频 | 日韩 欧美 中文 | 特黄特级a级黄毛片免费观看多人 | 一级毛片免费视频观看 | 亚洲 欧美 卡通 在线 另类 | 日韩精品欧美精品中文精品 | 99精品国内不卡在线观看 | 日本高清二区 | 日日摸狠狠的摸夜夜摸 | 国产91在线播放 | 狠狠干夜夜操 | 国产一级毛片夜一级毛片 | 最新欧美精品一区二区三区不卡 | 精品国产一区二区三区香蕉事 | 精品99视频 | 日韩国产成人 | 91视频网页 | 色综合久久综合欧美综合网 | 91色综合综合热五月激情 | 久久精品国产亚洲 | 欧美色爱综合网 | 久久天天躁夜夜躁狠狠躁2015 | 亚洲欧美强伦一区二区另类 | 在线亚洲精品国产波多野结衣 | 日日噜噜夜夜狠狠视频buoke | 亚洲精品一二三四区 | 久久亚洲私人国产精品va |