Ich habe die folgende Basisklasse und Unterklasse:Python Klassenvererbung: Attribute: ‚[SubClass]‘ Objekt hat kein Attribut ‚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)
Weiter in meinem Code, ich bin Inspektion eine Instanz eines TypeTwoEvent-Klasse, die nach einem Feld sucht, von dem ich weiß, dass es in der Basisklasse vorhanden ist - ich erwartete, dass es standardmäßig den Wert None hat. Allerdings wirft mein Code die folgende Ausnahme:
AttributeError: 'TypeTwoEvent' object has no attribute 'foobar'
Ich habe den Eindruck, dass die Basisklasse Felder, die von der Unterklasse geerbt werden würden und dass eine Instanz einer Unterklasse zu schaffen wird die Basisklasse instanziiert (und damit Aufruf seines Konstruktors) ...
Was fehlt mir hier ?. Warum hat TypeTwoEvent kein Foobar-Attribut - wenn die Basisklasse, von der es abgeleitet ist, ein Foobar-Attribut hat?
Wie unten erwähnt, müssen Sie explizit angeben, dass die Oberklassen ebenfalls initialisiert werden sollen. Aber __take care__: Wenn Sie mehrere Vererbung haben, dann wird dies sehr heikel. – katrielalex