是否可以在Python中使用子类构造函数

时间:2018-06-28 10:13:47

标签: python python-3.x

与标题相同。例如:

class A:
    def __init__(self,name):
        self.name=name

class B(A):
    def __init__(self,surname):
        self.surname=surname

obj=B('somename','somesurname')

如果允许的话,我应按什么顺序在对象实例化中传递参数?

3 个答案:

答案 0 :(得分:0)

您需要从派生类中显式调用超类的构造函数:

class A:
    def __init__(self,name):
        self.name=name

class B(A):
    def __init__(self, name, surname):
        super().__init__(name)
        self.surname=surname

obj=B('somename','somesurname')

答案 1 :(得分:0)

您应该使用super内置函数:

class A:
    def __init__(self, name):
        self.name=name

class B(A):
    def __init__(self, name, surname):
        super().__init__(name)
        self.surname=surname

obj=B('somename','somesurname')

答案 2 :(得分:0)

如果必须执行旧构造函数,则新构造函数应调用父构造函数。您可以使用super来调用parent构造函数:

class A:
    def __init__(self, name):
        self.name = name

class B(A):
    def __init__(self, name, surname):
        super().__init__(name)
        self.surname = surname

obj = B('somename', 'somesurname')

在python 2中,您必须指定当前类和self作为super()的参数:super(B, self),在python 3中,可以像上面所示的那样不带参数地调用它。