我有一个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
答案 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__()