我度过了一个愉快的星期六,对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的使用中推断出来吗?似乎需要额外的重复输入。作者必须这样做的原因是什么?
答案 0 :(得分:1)
原因是您可以进一步自定义子类。在您的示例中,当您仍然想输入first
和last
时,这更麻烦了,因为您必须输入两次,就像这样:
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
变量就会自动填写。