在子 class 中重用构造函数参数

Reuse constructor parameters in child class

我想在 Instructor class 中重用基础 class Person 构造函数,但添加额外的参数 degree。不知何故它不起作用。请查看更多信息:

class Person(object):
    def __init__(self, name = 'Jane Doe', year = 2000):
        self.n = name
        self.y = year
        
class Instructor(Person):
    def __init__(self, name, year, degree=12):
         super().__init__(name, year) #call base class ctor
         self.degree = degree;    

尽管如此,当我这样做时:

sammy = Instructor("John") # i want to set John as name

我收到以下错误:

Exception has occured: TypeError __init__() missing 1 required positional arguments year 

因为年份和学位有默认值我不明白这个错误。

如评论所示,您必须为 Instructorinit 设置默认值。 当您创建 Instructor 的对象时,Instructor 的构造函数在 Person 的构造函数之前被调用。所以它不关心 Person 的构造函数中的默认值。

class Person(object):
    def __init__(self, name = 'Jane Doe', year = 2000):
        self.n = name
        self.y = year
        
class Instructor(Person):
    def __init__(self, name = 'Jane Doe', year = 2000, degree=12):
         super().__init__(name, year) #call base class ctor
         self.degree = degree; 

然后:

sammy = Instructor("John")

无一例外地运行。

运行 的第一个 __init__Instructor 的初始化。这就是你得到错误的原因。为年份设置默认值将 运行 无一例外。