98 votes

Comment créer une nouvelle instance à partir d'un objet de classe en Python

J'ai besoin de créer dynamiquement une instance d'une classe en Python. Fondamentalement, j'utilise le module load_module et inspect pour importer et charger la classe dans un objet de classe, mais je ne sais pas comment créer une instance de cet objet de classe.

S'il vous plaît, aidez-vous !

162voto

xvf17 Points 311

J'ai trouvé la réponse à la question que j'avais qui m'a amené à cette page. Comme personne n'a suggéré la réponse à ma question, j'ai pensé la poster.

 class k:
  pass

a = k()
k2 = a.__class__
a2 = k2()

À ce stade, a et a2 sont tous deux des instances de la même classe (classe k).

3voto

Mike Pennington Points 16712

C'est ainsi que vous pouvez créer dynamiquement une classe nommée Child dans votre code, en supposant que Parent existe déjà... même si vous n'avez pas de Parent classe, vous pouvez utiliser object ...

Le code ci-dessous définit __init__() puis l'associe à la classe.

 >>> child_name = "Child"
>>> child_parents = (Parent,)
>>> child body = """
def __init__(self, arg1):
    # Initialization for the Child class
    self.foo = do_something(arg1)
"""
>>> child_dict = {}
>>> exec(child_body, globals(), child_dict)
>>> childobj = type(child_name, child_parents, child_dict)
>>> childobj.__name__
'Child'
>>> childobj.__bases__
(<type 'object'>,)
>>> # Instantiating the new Child object...
>>> childinst = childobj()
>>> childinst
<__main__.Child object at 0x1c91710>
>>>

2voto

user99019 Points 11

Si vous avez un module avec une classe que vous souhaitez importer, vous pouvez le faire comme ceci.

 module = __import__(filename)
instance = module.MyClass()

Si vous ne savez pas quel est le nom de la classe, vous pouvez parcourir les classes disponibles à partir d'un module.

 import inspect
module = __import__(filename)
for c in module.__dict__.values():
    if inspect.isclass(c):
        # You may need do some additional checking to ensure 
        # it's the class you want
        instance = c()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X