使用子类和super时__init__的参数

时间:2018-08-12 01:05:15

标签: python parent-child super

我度过了一个愉快的星期六,对Python对象进行了更深入的研究,并提出了一个简单的问题,该问题不是让人脑筋急转,而是有点好奇。

说我有一个基类和一个子类as follows

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的使用中推断出来吗?似乎需要额外的重复输入。作者必须这样做的原因是什么?

1 个答案:

答案 0 :(得分:1)

原因是您可以进一步自定义子类。在您的示例中,当您仍然想输入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")

在这种情况下,您只需要为first输入FamilyMember变量,last变量就会自动填写。