Hola buenas (y felices Reyes):

Tengo una classe con un montón de atributos y métodos.

Esta clase es la clase "base" de otras.

Las clases derivadas no necesitan algunos de los métodos o atributos de la 
clase base.

El tema de los métodos lo he solucionado con mixin pues sólo son 4 métodos los 
afectados.

El tema de los atributos no lo tengo tan claro. He visto varias soluciones 
(especialmente en SO), pero me he decido por una propia.

He definido una propiedad sin métodos para los atributos que quiero "anular" en 
la clase derivada.

La cosa queda más o menos así:


class Base():

    def __init__(self, **kwargs):
        self.a = {}
        ...


class A(Base):

    def __init__(self,  **kwargs):
        super().__init__(**kwrgs)
        ...

    a = property()


Esto consigue (aparentemente) el efecto que busco y cuando se intenta usar el 
atributo "a" en una instancia de la clase "A" obtengo un error del tipo 
AttributeError unreadable attribute, lo que me vale.

Entiendo que una instancia de "A" sigue teniendo realmente el atributo "a" 
aunque no lo pueda leer ni modificar.

La pregunta es: ¿Esta forma de hacer las cosas me puede dar algún problema en 
el futuro (algo distinto de lanzar una exception AttributeError claro)? ¿Hay 
formas más pythónicas de hacer esto?


Saludos


Miguel





_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a