Mam następujące klasy bazowej i podklasy:Python klasy dziedziczenie: AttributeError: „[Podklasa]” obiekt ma atrybut „xxx”
class Event(object):
def __init__(self, sr1=None, nr1=None, foo=None, foobar=None, nr2=None, sr2=None, flag = False):
self.sr1 = sr1
self.nr1 = nr1
self.foo = foo
self.foobar = foobar
self.nr2 = nr2
self.sr2 = sr2
self.flag = flag
self.state = STATE_NON_EVENT
def state_name(self):
return STATE_NAMES[self.state]
def __repr__(self):
return '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
def __repr__(self):
return "Type Two event (Level @: {0:.2f})".format(self.sr1)
dalej w moim kodu, mam kontroli instancję Klasa TypeTwoEvent, sprawdzając pole, które wiem, istnieje w klasie bazowej - oczekiwałem, że będzie domyślnie wartość Brak. Jednak mój kod pojawia się następujący wyjątek:
AttributeError: 'TypeTwoEvent' object has no attribute 'foobar'
Byłem pod wrażeniem, że pola klasy bazowej będą dziedziczone przez klasy sub i tworzenia instancji klasy sub będzie instancję klasy bazowej (a więc wywołaj jego konstruktora) ...
Czego mi tu brakuje? Dlaczego TypeTwoEvent nie ma atrybutu foobar - kiedy klasa bazowa, z której pochodzi, ma atrybut foobar?
Jak wspomniano poniżej, musisz wyraźnie zaznaczyć, że chcesz również zainicjować superklasy. Ale uważaj__: jeśli masz jakieś wielokrotne dziedziczenie, to zrobienie tego staje się bardzo delikatne. – katrielalex