[英]How to correctly use super().__init__ when passing arguments?
[英]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的使用中推斷出來嗎? 似乎需要額外的重復輸入。 作者必須這樣做的原因是什么?
原因是您可以進一步自定義子類。 在您的例子,當你還是要輸入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")
在這種情況下,您只需要輸入FamilyMember
的first
變量, last
變量將自動填寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.