在Python中从子类调用父类构造函数

61

那么如果我有一个类:

 class Person(object):
'''A class with several methods that revolve around a person's Name and Age.'''

    def __init__(self, name = 'Jane Doe', year = 2012):
        '''The default constructor for the Person class.'''
        self.n = name
        self.y = year

然后是这个子类:

 class Instructor(Person):
'''A subclass of the Person class, overloads the constructor with a new parameter.'''
     def __init__(self, name, year, degree):
         Person.__init__(self, name, year)

我有些迷惑如何让子类调用和使用父类构造函数中的 nameyear, 同时在子类中添加新参数 degree


3
你手头的东西有什么问题吗? - BrenBarn
你所做的应该没问题... - Joran Beasley
哦,好的,我不确定,也想不出测试的方法...现在我明白我一直是正确的...我道歉。 - Daniel Love Jr
1个回答

115

Python推荐使用super()

Python 2:

super(Instructor, self).__init__(name, year)

Python 3:

super().__init__(name, year)

我在使用super __init__方法时遇到的唯一问题是,它不会返回父类的实例。因此,在父类init方法中基于名称和年份推导出第三个参数的情况下,子对象无法访问该第三个参数,因为__init__不会返回它。因此,我更喜欢从Instructor中调用Person(name,year)。 - Always a newComer
4
没有所谓的“父类实例”。只有一个实例,它是被初始化的那个,并且通常称为“self”。请注意,我已经尽力使表述更加通俗易懂但没有改变原意。 - nagylzs
@AlwaysanewComer 那么你根本没有调用超类构造函数(至少不是显式地),而是从超类实例化了一个新对象。 - Come get some

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接