[英]How do I properly inherit from a base class using Super() (Python 2/3)?
[英]How to inherit default values from Parent class using super()
對於python和一般編程而言,這是一個相當新的示例,我有以下示例,在該示例中,我試圖從Parent類繼承默認值,以便可以同時創建兩個對象。 如何做得好干凈? -嘗試使用* args和** kwargs進行實驗,但是它具有不同的錯誤。
class Person(object):
def __init__(self, name="Jane Doe", age="30", gender="female"):
self.name = name
self.age = age
self.gender = gender
self.goal = "My goal is: Live for the moment!"
class Student(Person):
def __init__(self, name, age, gender, prev_org="The School of Life", skip_d=0):
super(Student, self).__init__(name, age, gender,)
self.prev_org = prev_org
self.skip_d = skip_d
self.goal = "Be a junior software developer."
john = Student('John Doe', 20, 'male', 'BME')
student = Student()
我認為這是不可能的。 相反,我所看到的是這樣的:
class Person(object):
def __init__(self, name=None, age=None, gender=None):
if name is None:
name = "Jane Doe"
if age is None:
age = "30"
if gender is None:
gender = "female"
self.name = name
self.age = age
self.gender = gender
self.goal = "My goal is: Live for the moment!"
class Student(Person):
def __init__(self, name=None, age=None, gender=None, prev_org="The School of Life", skip_d=0):
super(Student, self).__init__(name, age, gender)
self.prev_org = prev_org
self.skip_d = skip_d
self.goal = "Be a junior software developer."
john = Student('John Doe', 20, 'male', 'BME')
student = Student()
您可以使用*args
實現此目的,但我認為這不是一個很好的設計選擇。
class Student(Person):
def __init__(self, *args, prev_org="The School of Life", skip_d=0):
super(Student, self).__init__(*args[:2])
這會將前三個位置參數傳遞給父類( Person
),因此Student
無需擔心。
您需要對列表進行切片( [:2]
),因為如果您像這樣創建Student
的實例,則:
john = Student('John Doe', 20, 'male', 'BME')
然后, 'BME'
現在是位置參數,並包含在*args
。 鑒於:
john = Student('John Doe', 20, 'male', prev_org='BME')
現在它是一個關鍵字參數,因此不會出現在*args
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.