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/

Responder a