扩展Python类的init方法

时间:2018-06-22 08:57:15

标签: python oop

我有一个BaseClass和一个AbstractClass继承的BaseClass。这就是我已有的结构

class BaseClass(object):
    def __init__(self, initialize=True):
        self.name = 'base_class'
        self.start = 0
        if initialize:
            self.start = 100

class AbstractClass(BaseClass):
    def __init__(self):
        self.name = 'asbtract_class'
        super(BaseClass, self).__init__()

我想向抽象类传递一个initialize参数,该参数将被传递给基类,并且如果True将对象的start的值设置为100

我尝试使用super(BaseClass, self).__init__(),但是抽象类没有start属性。尝试访问时出现错误。

如何将initialize参数的值传递给AbstractClass并使用BaseClass的{​​{1}}方法来设置__init__属性start

我使用的代码

AbstractClass

1 个答案:

答案 0 :(得分:2)

要调用超类的构造函数,您应该使用子类的类名而不是超类,即:

class AbstractClass(BaseClass):
    def __init__(self):
        super(AbstractClass, self).__init__()
        self.name = 'abstract_class'

还请注意,我更改了调用超类的构造函数和设置name属性的顺序。如果在调用super之前进行设置,则该属性将被super类的构造函数覆盖,这很可能不是您想要的

正如@Sraw所指出的那样,对于python 3,调用super的表示法不再需要引用类名,并且可以简化为

class AbstractClass(BaseClass):
    def __init__(self):
        super().__init__()
相关问题