在子 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
因为年份和学位有默认值我不明白这个错误。
如评论所示,您必须为 Instructor
的 init
设置默认值。
当您创建 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
的初始化。这就是你得到错误的原因。为年份设置默认值将 运行 无一例外。
我想在 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
因为年份和学位有默认值我不明白这个错误。
如评论所示,您必须为 Instructor
的 init
设置默认值。
当您创建 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
的初始化。这就是你得到错误的原因。为年份设置默认值将 运行 无一例外。