繼承定義:我們定義一個(gè)類的時(shí)候买喧,可以從某個(gè)現(xiàn)有的類繼承,新的類稱為子類柬祠,而被繼承的類稱為基類、父類或超類负芋。
最大的好處是子類獲得了父類的全部功能漫蛔。例如:
class Animal(object):
def run(self):
print('Animal is running ')
def eat(self):
print('Animal is eating ')
class Dog(Animal):
pass
dog1 = Dog()
dog1.eat()#Animal is running
dog1.run()#Animal is eating
第二個(gè)好處需要我們對代碼做一點(diǎn)改進(jìn) 重寫父類的方法,是方法具有新的功能示罗,例如:
class Animal(object):
def run(self):
print('Animal is running ')
def eat(self):
print('Animal is eating ')
class Dog(Animal):
def run(self):
print('Dog is running')
def eat(self):
print('Dog is eating')
dog1 = Dog()
dog1.eat() #Dog is running
dog1.run() #Dog is eating
當(dāng)子類和父類都存在相同的方法時(shí)惩猫,我們說芝硬,子類的重寫了父類的方法蚜点,在代碼運(yùn)行的時(shí)候,總是會調(diào)用子類的重寫后的方法拌阴。這就是繼承的另一個(gè)好處:多態(tài)绍绘。
class Animal(object):
def run(self):
print('Animal is running ')
def eat(self):
print('Animal is eating ')
class Dog(Animal):
def run(self):
print('Dog is running')
def eat(self):
print('Dog is eating')
animal = Animal()
def anial_action(animal):
animal.run()
animal.eat()
anial_action(Animal())
anial_action(Dog())
#定義新的Animal子類Cat類, 你會發(fā)現(xiàn)迟赃,新增一個(gè)Animal的子類陪拘,不必對anial_action()做任何修改,
#實(shí)際上纤壁,任何依賴Animal作為參數(shù)的函數(shù)或者方法都可以不加修改地正常運(yùn)行左刽,原因就在于多態(tài)。
class Cat(Animal):
def run(self):
print('Cat is running ')
def eat(self):
print('Cat is eating ')
anial_action(Cat())