poo otra objetos metodo llamar lista interaccion instancias importar entre clases clase python

objetos - llamar metodo de otra clase python



Crea una instancia de una clase de Python a partir de un nombre (6)

En tu caso puedes usar algo como

get_class = lambda x: globals()[x] c = get_class("foo")

Y es aún más fácil no obtener clase del módulo.

import somemodule getattr(somemodule, "SomeClass")

Esta pregunta ya tiene una respuesta aquí:

Así que tengo un conjunto de clases y una cadena con uno de los nombres de clase. ¿Cómo puedo crear una instancia de una clase basada en esa cadena?

class foo: def __init__(self, left, right): self.left = left self.right = right str = "foo" x = Init(str, A, B)

Quiero que x sea una instanciación de la clase foo.


Si conoce el espacio de nombres involucrado, puede usarlo directamente; por ejemplo, si todas las clases están en el módulo zap , el diccionario vars(zap) es ese espacio de nombres; si están todos en el módulo actual, globals() es probablemente la forma más fácil de obtener ese diccionario.

Si las clases no están todas en el mismo espacio de nombres, entonces construir un espacio de nombres "artificial" (un dictado dedicado con nombres de clase como claves y objetos de clase como valores), como sugiere @Ignacio, es probablemente el enfoque más simple.


También podría considerar el uso de metaclase:

Cls = type(''foo'', (), foo.__dict__) x = Cls(A, B)

Sin embargo, crea otra clase similar.



classdict = {''foo'': foo} x = classdict[''foo''](A, B)


classname = "Foo" foo = vars()[classname](Bar, 0, 4)

O quizás

def mkinst(cls, *args, **kwargs): try: return globals()[cls](*args, **kwargs) except: raise NameError("Class %s is not defined" % cls) x = mkinst("Foo", bar, 0, 4, disc="bust") y = mkinst("Bar", foo, batman="robin")

Notas misceláneas sobre el fragmento:

*args y **kwargs son parámetros especiales en Python, significan "una serie de **kwargs sin palabra clave" y "un dict de argumentos palabra clave" en consecuencia.

PEP-8 (guía de estilo oficial de Python) recomienda usar cls para las variables de clase.

vars() devuelve un dict de variables definidas en el ámbito local.

globals() devuelve un dictado de variables actualmente presentes en el entorno fuera del ámbito local.