假設我們有一個動物類Animal,里面有兩個屬性name、age,和兩個方法sleep()和eat()。
animal.py
1 class Animal(): 2 3 def __init__(self,name,age): 4 self.name = name 5 self.age = age 6 7 def eat(self): 8 print("Animal " + self.name + " is eating foods") 9 10 def sleep(self): 11 print("Animal " + self.name + " is sleeping")
假設我們還有一個Dog類,它也包含這兩個屬性和這兩個方法,還有自己特有的屬性(color)和方法(dark)。
dog.py
1 from animal import Animal 2 3 class Dog(Animal): 4 def __init__(self,name,age,color): 5 super().__init__(name,age) 6 self.color = color 7 8 def bark(self): 9 print("Dog " + self.name + " is barking ,it is " + self.color) 10 11 12 my_dog = Dog('kimi',18,'red') 13 my_dog.bark() 14 my_dog.eat() 15 my_dog.sleep()
在我們編寫dog類的時候,就不需要在重新寫那兩個已在Animal類中的方法,我們直接繼承過來就可以使用了,第一行代碼導入Animal 類用於Dog類的繼承,導入類語法:from 模塊名 import 類名。
第三行,我們將Animal 類傳入Dog()中,表示Dog繼承Animal,而第五行的super() 表示調用父類的__init__() 方法進行初始化,Dog中還有自己特定的屬性color (顏色),因為Animal 中沒有color這個屬性,所以我們需要單獨使用 self.color=color 語句賦值,Dog類還有自己特定的方法,bark() 狗吠的方法,所以第13、14、15行代碼,既可以調用自己類中特定的方法還可以調用父類Animal中所有的方法。
我們也可以在給類初始化時,賦予默認值,這樣就不用傳遞每個參數,將Dog類中的__init__() 重新編寫:
def __init__(self,name,age,color=‘blue’): super().__init__(name,age) self.color = color
此時如果我們不傳入color 則,color默認為blue。
重寫父類方法
我們可以重寫父類中的方法,只需要和父類中方法名和形參數量相同即可。
我的問題在於,讀書不多,而想的太多
