Python class inheritance: AttributeError: '[SubClass]' object has no attribute 'xxx'
我有以下基类和子类:
1 2 3 4 5 6 7 8 9 10 11 | class Event(object): def __init__(self, sr1=None, foobar=None): self.sr1 = sr1 self.foobar = foobar self.state = STATE_NON_EVENT # Event class wrappers to provide syntatic sugar class TypeTwoEvent(Event): def __init__(self, level=None): self.sr1 = level self.state = STATE_EVENT_TWO |
在我的代码中,我进一步检查了一个
AttributeError: 'TypeTwoEvent' object has no attribute 'foobar'
我的印象是,基类字段将由子类继承,创建子类的实例将实例化基类(从而调用其构造函数)。
我这里缺什么?为什么
你的子类应该是:
1 2 3 4 5 6 | class TypeTwoEvent(Event): def __init__(self, level=None, *args, **kwargs): super(TypeTwoEvent, self).__init__(*args, **kwargs) self.sr1 = level self.state = STATE_EVENT_TWO |
因为您重写了
记住,
1 | super(ClassName, self).__init__(arguments, that, goes, to, parents) |
是调用方法的父版本的语法。
对于
您正在重写父类的构造函数(
1 2 3 4 5 6 7 | class TypeTwoEvent(Event): def __init__(self, level=None, **kwargs): # the super call to set the attributes in the parent class super(TypeTwoEvent, self).__init__(**kwargs) # now, extend other attributes self.sr1 = level self.state = STATE_EVENT_TWO |
注意,
创建实例时,调用其
你应该从
您需要从继承类的
请参阅此处了解如何执行此操作。
我也有这个问题,但是我把