> > ¿tendría que mantener a mano ese diccionario o hay forma de hacer que se > cree automáticamente? > > La idea es que se cree y gestione automaticamente, claro. He estado mirando las Metaclases (que es un concepto donde estoy bastante perdido, pero sigo luchando) y se podría hacer algo así::
-[ Cortar por aqui ]--------------------------------------- class Base(type): Catalogo = {} def __new__(cls, name, bases, dct): new_class = type.__new__(cls, name, bases, dct) Base.Catalogo[name] = new_class return new_class def instance_object_of_class(class_name, *args): return Base.Catalogo[class_name](*args) class A1(): __metaclass__ = Base def __str__(self): return 'Soy de la clase A1' class A2(): __metaclass__ = Base def __str__(self): return 'Soy de la clase A2' class B1(): __metaclass__ = Base def __str__(self): return 'Soy de la clase B1' class B2(): __metaclass__ = Base def __init__(self, value): self.value = value def __str__(self): return 'Soy de la clase B2, value vale %s' % self.value -[ Cortar por aqui ]--------------------------------------- Por ejemplo: >>> a1 = instance_object_of_class('A1') >>> print a1 Soy de la clase A1 >>> a2 = instance_object_of_class('A2') >>> print a2 Soy de la clase A2 >>> b1 = instance_object_of_class('B1') >>> print b1 Soy de la clase B1 >>> b2 = instance_object_of_class('B2', 23) >>> print b2 Soy de la clase B2, value vale 23 Lo unico que habria que hacer es incluir la referencia a la metaclase "Base" con la variable mágica __metaclass__ en la declaración de cada clase. Habría que codificar también un mensaje de error por si se intentar definir dos clases con el mismo nombre, ahora mismo la mas nueva machacaría a la mas antigua.
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/