Necesito inicializar todas las ranuras de una instancia con None. ¿Cómo obtengo todos los espacios de una clase derivada?Obtener todos los __slots__ de la clase derivada
Ejemplo (que no funciona):
class A(object):
__slots__ = "a"
def __init__(self):
# this does not work for inherited classes
for slot in type(self).__slots__:
setattr(self, slot, None)
class B(A):
__slots__ = "b"
que podría utilizar un atributo clase adicional que contiene las ranuras (incluyendo el heredada) para todas las clases, como
class A(object):
__slots__ = "a"
all_slots = "a"
def __init__(self):
# this does not work for inherited classes
for slot in type(self).all_slots:
setattr(self, slot, None)
class B(A):
__slots__ = "b"
all_slots = ["a", "b"]
pero que parece subóptimo.
¡Cualquier comentario es apreciado!
Cheers,
Ene
¿Por qué necesita '__slots__' –
utilizo estas clases para manejar objetos de negocio JSON en el cliente (" tags ": richt client, PyQt, acceso de atributos mediante descriptores, resolución diferida de referencias, validación de tipo). Tengo hasta un millón de esos objetos, por lo que los requisitos de memoria pueden ser un problema (incluso si no tengo datos reales del mundo real ahora; sé lo que estás pensando ... raíz de todo mal ...; -)). Pero también necesito prohibir cualquier creación dinámica de atributos. Esto asegura que no haya atributos 'basura' cuando se vuelven a enviar objetos al servidor. – Knack