如何使用super()从父类继承默认值



在这里是Python的新事物,并且作为一般编程,我有以下示例,在此示例中,我试图从父类中继承默认值可以制作对象。如何做好干净? - 试图尝试 *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()

您可以使用*args实现此目标,但我认为这不是一个很好的设计选择。

class Student(Person):
    def __init__(self, *args, prev_org="The School of Life", skip_d=0):
        super(Student, self).__init__(*args[:2])

这将前3个位置参数传递给父级(Person)类,因此Student不必担心。

您需要切片([:2])列表,因为如果您创建了Student的实例,则需要:

john = Student('John Doe', 20, 'male', 'BME')

然后'BME'现在是一个位置参数,并且包含在*args中。而:

john = Student('John Doe', 20, 'male', prev_org='BME')

现在是关键字参数,因此不会出现在*args中。

我认为这是不可能的。我看到的是这样的东西:

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()

最新更新