2010/10/27 Jose Caballero <[email protected]>:
>>
>> >
>> > 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
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/