在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 繼承和多態(tài)
基礎(chǔ)
itertools
HTTP 服務(wù)
hashlib
閉包
文件和目錄
單元測試
使用 @property
標(biāo)準(zhǔn)模塊
陌生的 metaclass
Base64
進程、線程和協(xié)程
讀寫二進制文件
匿名函數(shù)
輸入和輸出
Click
元組
字符編碼
partial 函數(shù)
參考資料
collections
協(xié)程
類和實例
Python 之旅
定制類和魔法方法
常用數(shù)據(jù)類型
繼承和多態(tài)
ThreadLocal
HTTP 協(xié)議簡介
Requests 庫的使用
讀寫文本文件
列表
os 模塊
迭代器 (Iterator)
正則表達式
集合
上下文管理器
異常處理
你不知道的 super
定義函數(shù)
datetime
資源推薦
字典
slots 魔法
hmac
第三方模塊
進程
類方法和靜態(tài)方法
函數(shù)參數(shù)
高階函數(shù)
函數(shù)
re 模塊
高級特性
線程
argparse
生成器
結(jié)束語
字符串
map/reduce/filter
函數(shù)式編程
Celery
裝飾器

繼承和多態(tài)

在面向?qū)ο缶幊讨?,?dāng)我們已經(jīng)創(chuàng)建了一個類,而又想再創(chuàng)建一個與之相似的類,比如添加幾個方法,或者修改原來的方法,這時我們不必從頭開始,可以從原來的類派生出一個新的類,我們把原來的類稱為父類基類,而派生出的類稱為子類,子類繼承了父類的所有數(shù)據(jù)和方法。

讓我們看一個簡單的例子,首先我們定義一個 Animal 類:

class Animal(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        print 'Hello, I am %s.' % self.name

現(xiàn)在,我們想創(chuàng)建一個 Dog 類,比如:

class Dog(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        print 'WangWang.., I am %s. ' % self.name

可以看到,Dog 類和 Animal 類幾乎是一樣的,只是 greet 方法不一樣,我們完全沒必要創(chuàng)建一個新的類,而是從 Animal 類派生出一個新的類:

class Dog(Animal):
    def greet(self):
        print 'WangWang.., I am %s. ' % self.name

Dog 類是從 Animal 類繼承而來的,Dog 類自動獲得了 Animal 類的所有數(shù)據(jù)和方法,而且還可以對父類的方法進行修改,我們看看使用:

>>> animal = Animal('animal')  # 創(chuàng)建 animal 實例
>>> animal.greet()
Hello, I am animal.
>>> 
>>> dog = Dog('dog')        # 創(chuàng)建 dog 實例
>>> dog.greet()
WangWang.., I am dog. 

我們還可以對 Dog 類添加新的方法:

class Dog(Animal):
    def greet(self):
        print 'WangWang.., I am %s. ' % self.name
    def run(self):
        print 'I am running.I am running'

使用:

>>> dog = Dog('dog')
>>> dog.greet()
WangWang.., I am dog.
>>> dog.run()
I am running

多態(tài)

多態(tài)的概念其實不難理解,它是指對不同類型的變量進行相同的操作,它會根據(jù)對象(或類)類型的不同而表現(xiàn)出不同的行為

事實上,我們經(jīng)常用到多態(tài)的性質(zhì),比如:

>>> 1 + 2
3
>>> 'a' + 'b'
'ab'

可以看到,我們對兩個整數(shù)進行 + 操作,會返回它們的和,對兩個字符進行相同的 + 操作,會返回拼接后的字符串。也就是說,不同類型的對象對同一消息會作出不同的響應(yīng)。

再看看類的例子:

class Animal(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        print 'Hello, I am %s.' % self.name

class Dog(Animal):
    def greet(self):
        print 'WangWang.., I am %s.' % self.name

class Cat(Animal):
    def greet(self):
        print 'MiaoMiao.., I am %s' % self.name

def hello(animal):
    animal.greet()

看看多態(tài)的使用:

>>> dog = Dog('dog')
>>> hello(dog)
WangWang.., I am dog.
>>>
>>> cat = Cat('cat')
>>> hello(cat)
MiaoMiao.., I am cat

可以看到,catdog 是兩個不同的對象,對它們調(diào)用 greet 方法,它們會自動調(diào)用實際類型的 greet 方法,作出不同的響應(yīng)。這就是多態(tài)的魅力。

小結(jié)

  • 繼承可以拿到父類的所有數(shù)據(jù)和方法,子類可以重寫父類的方法,也可以新增自己特有的方法。
  • 有了繼承,才有了多態(tài),不同類的對象對同一消息會作出不同的相應(yīng)。
上一篇:Requests 庫的使用下一篇: