initialising a class by name

Steven D'Aprano steven at
Wed Jan 14 08:50:47 CET 2009

On Wed, 14 Jan 2009 11:16:58 +0530, Krishnakant wrote:

> hello all,
> I have a strange situation where I have to load initiate an instance of
> a class at run-time with the name given by the user from a dropdown
> list.

Not strange at all.

> Is this possible in python and how?

Of course. Just use a dispatch table. Use a dict to map user strings to 

>>> class Spam(object): pass
>>> class Ham(object): pass
>>> dispatch_table = {"Spam": Spam, "Ham": Ham}
>>> dispatch_table["Ham"]()
<__main__.Ham object at 0xb7ea2f8c>

The keys don't even have to be the name of the class, they can be 
whatever input your users can give:

>>> dispatch_table["Yummy meat-like product"] = Spam
>>> dispatch_table["Yummy meat-like product"]()
<__main__.Spam object at 0xb7ea2f6c>

You can even automate it:

>>> dispatch_table = {}
>>> for name in dir():
...     obj = globals()[name]
...     if type(obj) == type:
...         dispatch_table[name] = obj
>>> dispatch_table
{'Ham': <class '__main__.Ham'>, 'Spam': <class '__main__.Spam'>}


More information about the Python-list mailing list