在面向?qū)ο缶幊讨?,?dāng)我們已經(jīng)創(chuàng)建了一個(gè)類,而又想再創(chuàng)建一個(gè)與之相似的類,比如添加幾個(gè)方法,或者修改原來(lái)的方法,這時(shí)我們不必從頭開(kāi)始,可以從原來(lái)的類派生出一個(gè)新的類,我們把原來(lái)的類稱為父類或基類,而派生出的類稱為子類,子類繼承了父類的所有數(shù)據(jù)和方法。
讓我們看一個(gè)簡(jiǎn)單的例子,首先我們定義一個(gè) 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)建一個(gè) Dog 類,比如:
class Dog(object):
def __init__(self, name):
self.name = name
def greet(self):
print 'WangWang.., I am %s. ' % self.name
可以看到,Dog 類和 Animal 類幾乎是一樣的,只是 greet
方法不一樣,我們完全沒(méi)必要?jiǎng)?chuàng)建一個(gè)新的類,而是從 Animal 類派生出一個(gè)新的類:
class Dog(Animal):
def greet(self):
print 'WangWang.., I am %s. ' % self.name
Dog 類是從 Animal 類繼承而來(lái)的,Dog 類自動(dòng)獲得了 Animal 類的所有數(shù)據(jù)和方法,而且還可以對(duì)父類的方法進(jìn)行修改,我們看看使用:
>>> animal = Animal('animal') # 創(chuàng)建 animal 實(shí)例
>>> animal.greet()
Hello, I am animal.
>>>
>>> dog = Dog('dog') # 創(chuàng)建 dog 實(shí)例
>>> dog.greet()
WangWang.., I am dog.
我們還可以對(duì) 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)的概念其實(shí)不難理解,它是指對(duì)不同類型的變量進(jìn)行相同的操作,它會(huì)根據(jù)對(duì)象(或類)類型的不同而表現(xiàn)出不同的行為。
事實(shí)上,我們經(jīng)常用到多態(tài)的性質(zhì),比如:
>>> 1 + 2
3
>>> 'a' + 'b'
'ab'
可以看到,我們對(duì)兩個(gè)整數(shù)進(jìn)行 +
操作,會(huì)返回它們的和,對(duì)兩個(gè)字符進(jìn)行相同的 +
操作,會(huì)返回拼接后的字符串。也就是說(shuō),不同類型的對(duì)象對(duì)同一消息會(huì)作出不同的響應(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
是兩個(gè)不同的對(duì)象,對(duì)它們調(diào)用 greet
方法,它們會(huì)自動(dòng)調(diào)用實(shí)際類型的 greet
方法,作出不同的響應(yīng)。這就是多態(tài)的魅力。