Python子類調用父類內屬性的方法


最常見的就是初始化方法__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
'''

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM