tengo una función que crea clases derivadas de sus argumentos:¿Cómo establecer los nombres de clase dinámicamente?
def factory(BaseClass) :
class NewClass(BaseClass) : pass
return NewClass
Ahora cuando lo uso para crear nuevas clases, las clases son todos el mismo nombre, y los casos que parezca que tienen el mismo tipo:
NewA = factory(ClassA)
NewB = factory(ClassB)
print type(NewA()) # <class __main__.NewClass>
print type(NewB()) # <class __main__.NewClass>
¿Es la solución adecuada para configurar manualmente el atributo __name__
?
NewA.__name__ = 'NewA'
print type(NewA()) # <class __main__.NewA>
¿Hay alguna otra cosa que debería establecer mientras estoy en ello?
Parece un poco torpe si la definición de clase en NewClass es muy larga. Tendría que acumular todos los métodos en un diccionario (supongo que la cadena de documentación también va allí, bajo la tecla ''__doc __''). – kiyo
¿Qué sucede si los métodos en NewClass deben referirse dinámicamente a los métodos de BaseClass? – kiyo
'type' es para cosas como crear clases con listas base variables; es completamente la herramienta incorrecta para esto. –