[英]Extend Python class's init method
我有一个BaseClass
和一个从BaseClass
继承的AbstractClass
。 这是我所拥有的结构
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
的__init__
方法设置AbstractClass
的start
属性。
我使用的代码
best = BaseClass()
abs = AbstractClass()
abs.start # AttributeError: 'AbstractClass' object has no attribute 'start'
要调用超类的构造函数,您应该使用子类的类名而不是超类,即:
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__()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.