-2

This is my first question and please understand that I am not a native speaker.

I'm trying to create instances of classes during script parses JSON. Script has dict like:

classes = {'user': 'User', 'chat': 'Chat', 'message': 'Message'}

and classes User, Chat, Message. When script finds key in json corresponding key in dict I need to create instance of corresponding class.

I found solution, but I think it stupid:

>>> class User():
...     name = 'John'
>>> class_name = 'User()'
>>> variable_name = 'user'
>>> exec(f'{variable_name}={class_name}')``` 


Flacon
  • 1
  • 1
  • https://stackoverflow.com/questions/17959996/get-python-class-object-from-class-name-string-in-the-same-module – RafalS Dec 12 '19 at 17:56

1 Answers1

0

You can use the globals() command as this:

globals()['user'] = globals()['User']()

globals() function returns you everything you got in your global scope (as dict)

Full code:

class User():
    pass
class Chat():
    pass
class Message():
    pass
classes = {'user': 'User', 'chat': 'Chat', 'message': 'Message'}
my_globals = globals()
for var_name, class_name in classes.items():
    my_globals[var_name] = my_globals[class_name]()
Reznik
  • 2,663
  • 1
  • 11
  • 31