2010/10/27 Jose Caballero <jcaballero....@gmail.com>: >> >> > >> > Respecto a la clase Base, quiero ver si puedo implementar un >> > >> > raise NotImplementedError >> > >> > Lo he intentado pero no me ha funcionado. Si llamo a un método no >> > implementado en una de las clases heredadas me lanza una excepción >> > AttributeError en lugar de NotImplementedError. >> > >> >> {{{ >> #!python >> >> class Base: >> def oh_mary_mary(self): >> raise NotImplementedError('... you should be out of your mind >> ...') >> >> class SubClass: >> r"""Every little thing she does is magic ...""" >> >> # PUM !!! >> SubClass().oh_mary_mary() >> >> }}} > > > Como digo, así sin más no parece funcionar. Funciona perfectamente si > SubClass está heredada de Base. En ese caso no hay problema. Pero en el > código propuesto con metaclases SubClass no hereda de Base, y por tanto el > > raise NotImplementedError > > no parece afectarle a SubClass. Supongo que todo es cuestión de dale una > vuelta de tuerca más. >
Sospecho que hay que darle una palmadita ... hay muchas formas de hacer esto, aquí va una . {{{ #!python class Meta(type): def __init__(self, name, suite, bases): def oh_mary_mary(self): raise NotImplementedError('... you should be out of your mind') suite.setdefault('oh_mary_mary', oh_mary_mary) type.__init__(self, name, suite, bases) # Let's make this really ... META }}} Quizás en vez de __init__ haya que modificar __new__ ... pruebas , pruebas , no te hace falta equipaje ... y más pruebas ... ;o) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/