簡體   English   中英

如何使用super()從Parent類繼承默認值

[英]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.

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