在 Python 中呼叫父類的超級建構函式

Vaibhav Vaibhav 2022年5月17日
在 Python 中呼叫父類的超級建構函式

繼承是電腦科學中物件導向程式設計的一個強大概念,它可以幫助我們避免編寫冗餘程式碼,並且與程式設計的黃金 DRY 規則(不要重複自己)相得益彰。使用繼承,一個類可以繼承另一個類的所有屬性和功能。繼承功能的類是父類,繼承功能的類是子類。

繼承幫助程式設計師和開發人員編寫可擴充套件、可重用和可維護的程式碼,從而提高生產力和效率。

要繼承所有的屬性和方法,我們必須從子類執行父類的建構函式。在本文中,我們將學習如何在 Python 中呼叫父類的超級建構函式。

在 Python 中呼叫父類的超級建構函式

在子類的建構函式中呼叫父類的建構函式或超建構函式。相同的語法如下。

super().__init__(*args, **kwargs)

父類所需的所有引數都在 __init__() 方法中傳遞。在上述語法中,*args, **kwargs 涵蓋了所有引數,但也可以單獨提及所有引數,如下所示。

super().__init__(argument1, argument2, argument3, ...)

現在我們已經完成了理論,讓我們實際理解這個概念。請參閱以下 Python 程式碼以瞭解繼承的概念以及如何呼叫超級建構函式。

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
        
    def get_name(self):
        return self.name
        
    def set_name(self, name):
        if isinstance(name, str):
            self.name = name
        
    def get_age(self):
        return self.age
        
    def set_age(self, age):
        if isinstance(age, int):
            self.age = age
        
    def get_gender(self):
        return self.gender
        
    def set_gender(self, gender):
        if isinstance(gender, str):
            self.gender = gender
            
class Student(Person):
    def __init__(self, name, age, gender, roll_number):
        super().__init__(name, age, gender) # Important
        self.roll_number = roll_number
        
    def get_roll_number(self):
        return self.roll_number
        
    def set_roll_number(self, roll_number):
        if isinstance(roll_number, int):
            self.roll_number = roll_number
            
adam = Student("Adam", 21, "M", 5)
emma = Student("Emma", 23, "F", 18)
print("Name:", adam.get_name())
print("Age:", adam.get_age())
print("Gender:", adam.get_gender())
print("Roll Number:", adam.get_roll_number())
print()
print("Name:", emma.get_name())
print("Age:", emma.get_age())
print("Gender:", emma.get_gender())
print("Roll Number:", emma.get_roll_number())

輸出:

Name: Adam
Age: 21
Gender: M
Roll Number: 5

Name: Emma
Age: 23
Gender: F
Roll Number: 18

Person 類是父類,Student 類是子類。父類和子類的所有屬性都有 setter 和 getter。子類繼承父類的所有屬性和方法。這條語句 super().__init__(name, age, gender) 呼叫了 Person 類的建構函式。注意需要呼叫父類的建構函式;否則,程式碼將中斷。

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

LinkedIn GitHub

相關文章 - Python Class