最常見的就是初始化方法__init__()
python中類的初始化方法是__init__(),因此父類子類的初始化方法都是這個,如果子類不實現這個函數,初始化時調用父類的初始化函數,如果子類實現這個函數,就覆蓋了父類的這個函數,既然繼承父類,就要在這個函數里顯式調用一下父類的__init__(),這跟C++,jAVA不一樣,他們是自動調用父類初始化函數的。
調用父類函數有以下方法:
# -*- coding:utf-8 -*-
class Animal():
def __init__(self, name):
self.name = name
def saySomething(self):
print("I am " + self.name)
class Dog(Animal):
def __init__(self, name):
super().__init__(name)
def saySomething(self):
print ("I am "+ self.name + ", and I can bark")
1.直接寫類名調用: parent_class.parent_attribute(self)
2.用 super(type, obj).method(arg)方法調用:super(child_class, child_object).parent_attribute(arg) 【不需要寫self】
3.在類定義中調用本類的父類方法,可以直接 super().parent_method(arg) 【個人推崇這種寫法】
樣例如下:
# -*- coding:utf-8 -*-
# file_name: python_class_inheritance_example.py
class Animal():
def __init__(self, name):
self.name = name
def saySomething(self):
print("I am " + self.name)
class Dog(Animal):
def __init__(self, name):
super().__init__(name)
def saySomething(self):
print ("I am "+ self.name + ", and I can bark")
def animal_say_1(self):
# 子類調用父類的方法
# 方式1
super(Dog, self).saySomething()
def animal_say_2(self):
# 方式2 [推薦]
super().saySomething()
def animal_say_3(self):
# 方式3
Animal.saySomething(self)
if __name__ == "__main__":
dog = Dog("Blake")
dog.saySomething()
dog.animal_say_1()
dog.animal_say_2()
dog.animal_say_3()
# 子類對象調用被覆蓋的父類方法
super(Dog, dog).saySomething()
'''
輸出結果如下:
python python_class_inheritance_example.py
I am Blake, and I can bark
I am Blake
I am Blake
I am Blake
I am Blake
'''
