在面向?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)的概念其實不難理解,它是指對不同類型的變量進行相同的操作,它會根據(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
可以看到,cat 和 dog 是兩個不同的對象,對它們調(diào)用 greet 方法,它們會自動調(diào)用實際類型的 greet 方法,作出不同的響應(yīng)。這就是多態(tài)的魅力。