I want to load class dynamically.
I have three files, MainClass.py, MyClassA.py and MyClassB.py. Why do I run different results from MainClass.py and MyClassA.py?
When running from MainClass.py, the result is:
B
Which is the result I want.
When running from MyClassA.py, the result is :
MainClass.property is None!
The code of MainClass.py is as follows:
from MyClassA import MyClassA, main
if __name__ == '__main__':
MyClassA.property = 'B'
main()
The code of MyClassA.py is as follows:
import importlib
class MyClassA:
property = None
def main():
module_name = 'MyClass' + MyClassA.property
class_name = module_name
module_object = importlib.import_module(module_name)
module_class_object = getattr(module_object, class_name)
'''
The reason why I quote MyClassA here is that because module_class_object is dynamically loaded,
PyCharm cannot automatically prompt related content when writing code,
and the upper class is subject to the first one,
so I put MyClassA in the second referenced for my convenience PyCharm writes code.
'''
class MainClass(module_class_object, MyClassA):
pass
if MainClass.property is None:
print('MainClass.property is None!')
else:
print(MainClass.property)
if __name__ == '__main__':
MyClassA.property = 'B'
main()
The code of MyClassB.py is as follows:
from MyClassA import MyClassA
class MyClassB(MyClassA):
pass