For example:
Import MyModule
MyObject = Mymodule.myclass ()
Or
From MyModule import MyClass
MyObject = MyClass ()
If you want to create a class instance dynamically in your program, you have to take two steps, for example:
m = __import__ (' MyModule ')
c = GetAttr (M, ' MyClass ')
MyObject = C ()
Note, however: if MyClass is not in the MyModule auto-export list (__all__), it must be imported explicitly, for example:
m = __import__ (' MyModule ', globals (), locals (), [' MyClass '])
c = GetAttr (M, ' MyClass ')
MyObject = C ()
To encapsulate some of the specifications, you can do this:
Code
The code is as follows:
Class Activator:
"' This class is used to dynamically create an instance of a class. '
@staticmethod
Def CreateInstance (Class_name, *args, **kwargs):
"Dynamically creates an instance of the class.
[Parameter]
Class_name-Full name of the class (including module name)
*args-The parameters required by the class constructor (list)
*kwargs-Required parameters for class constructors (DICT)
[Return]
Instances of dynamically created classes
[Example]
class_name = ' Knightmade.logging.Logger '
Logger = Activator.CreateInstance (class_name, ' logname ')
'''
(Module_name, class_name) = Class_name.rsplit ('. ', 1)
Module_meta = __import__ (Module_name, Globals (), locals (), [class_name])
Class_meta = GetAttr (Module_meta, class_name)
Object = Class_meta (*args, **kwargs)
Return object