Tengo la siguiente clase base y la subclase:Python herencia de clases: AttributeError: '[subclase]' objeto no tiene atributo '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)
Más adelante en mi código, estoy inspeccionando una instancia de una Clase TypeTwoEvent, buscando un campo que sé que existe en la clase base; esperaba que fuera predeterminado para valorar None. Sin embargo, mi código plantea la siguiente excepción:
AttributeError: 'TypeTwoEvent' object has no attribute 'foobar'
que estaba bajo la impresión de que los campos de la clase de base serían heredados por la subclase y que la creación de una instancia de una subclase será una instancia de la clase base (y por lo tanto invocar su constructor) ...
¿Qué me falta aquí ?. ¿Por qué TypeTwoEvent no tiene un atributo foobar, cuando la clase base de la que se deriva tiene un atributo foobar?
Como se indica a continuación, debe indicar explícitamente que también desea inicializar las superclases. Pero __tomar cuidado__: si tienes herencia múltiple, hacer que esto ocurra se vuelve muy delicado. – katrielalex