簡體   English   中英

使用子類和super時__init__的參數

[英]Arguments to __init__ when using a subclass and super

我度過了一個愉快的星期六,對Python對象進行了更深入的研究,並提出了一個簡單的問題,該問題不是讓人腦筋急轉,而是有點好奇。

說我有一個基類和一個子類,如下所示

class Person:

    def __init__(self, first, last):
        self.firstname = first
        self.lastname = last

    def __str__(self):
        return self.firstname + " " + self.lastname

class Employee(Person):

    def __init__(self, first, last, staffnum):
        super().__init__(first, last)
        self.staffnumber = staffnum


x = Person("Marge", "Simpson")
y = Employee("Homer", "Simpson", "1007")

我在看Employee類。

鑒於:
我們正在使用super()並且其中包含參數,
為什么在python中__init__仍然需要我們先鍵入first, last鍵入?
不應該從我們對super的使用中推斷出來嗎? 似乎需要額外的重復輸入。 作者必須這樣做的原因是什么?

原因是您可以進一步自定義子類。 在您的例子,當你還是要輸入firstlast它更是一個麻煩,因為你必須輸入兩次,就像這樣:

class Employee(Person):
    def __init__(self, first, last):
        super().__init__(first, last)

emp1 = Employee("Bob", "Jones")

但是,您可能需要自動填充其中的一些值。 在此示例中,也許是姓氏很常見的FamilyMember類。

class FamilyMember(Person):
    def __init__(self, first):
        super().__init__(first, last="Erikson")

fm1 = FamilyMember("Paul")

在這種情況下,您只需要輸入FamilyMemberfirst變量, last變量將自動填寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM