繼承是一種建立類的方法,一個類能夠繼承一個或多個父類,原始類稱爲基類或超類。
繼承能夠很方便的幫助子類擁有父類的屬性和方法,減小代碼冗餘,子類能夠定義本身的方法和屬性,也能夠覆蓋父類的方法和屬性。html
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("這是父類的__init__方法") def info(self): print('這是一隻' + self.kind, ',今年' + self.age + '歲了') animal = Animal('狗', '5') animal.info() # 這是父類的__init__方法 # 這是一隻狗 ,今年5歲了
class Cat(Animal): pass # 不想向類中添加任何其餘的屬性或者方法,可使用關鍵字pass cat = Cat('貓','3') cat.info() # 這是父類的__init__方法 # 這是一隻貓 ,今年3歲了
__init__()
方法後,會在建立對象時自動調用。你能夠在子類中從新建立一個__init__()
方法,這樣既能夠繼承父類的屬性,又能夠給這個子類添加新的屬性:python
class Cat(Animal): def __init__(self, kind, age, name): self.kind = kind self.age = age self.name = name print("這是子類的__init__方法") def info(self): # 若是在子類中添加一個父類同名的方法,會覆蓋父類的方法 print('這是一隻' + self.kind, ',今年' + self.age + '歲了', '它的名字是'+self.name) cat = Cat('貓, '3', 'xixi') cat.info() # 這是子類的__init__方法 # 這是一隻貓,今年3歲了 它的名字是xixi
如上所示,在子類中添加了一個info()
方法,這是一個和父類中的方法同名的方法,會覆蓋父類原有的方法。當你須要子類中用特殊或不一樣的功能時就能夠這樣作。code
class DerivedClassName(Base1, Base2, Base3): <statement-1> ... <statement-N>
須要注意圓括號中基類(父類)的順序,如果基類中有相同的方法名,而在子類使用時未指定,python從左至右搜索 即方法在子類中未找到時,從左到右查找基類中是否包含方法。htm
class Parent(object): def info(self): print('This is Parent') def show(self): print("show time") class A(Parent): # 繼承Parent def info(self): # 自動覆蓋父類的此方法 print('This is A') class B(Parent): # 繼承Parent def info(self): print('This is B') class C(A, B): # 繼承A,B pass
info()
方法,輸出的是This is A
,由於A類自身的info方法會覆蓋父類Parent中的info方法。而用實例對象調用show()
方法調用的是父類Parent中的方法,由於A類中沒有這個方法,因此會去父類中查找。對象
a = A() a.info() # 輸出:This is A a.show() # 輸出:show time
b = B() b.info() # 輸出:This is B a.show() # 輸出:show time
info()
方法時,須要注意一下這個info()
方法是哪一個父類中的方法。只要記住查找的順序是從左至右就能夠了,因此最終調用的是父類A中的info()
方法。c = C() c.info() # 輸出: This is A