【发布时间】:2021-11-26 16:57:48
【问题描述】:
我要加载classdynamically。
我有三个文件,MainClass.py、MyClassA.py 和 MyClassB.py。为什么我从MainClass.py 和MyClassA.py 运行different results?
从MainClass.py运行时,结果为:
B
这是我想要的结果。
从MyClassA.py 运行时,结果为:
MainClass.property is None!
MainClass.py的代码如下:
from MyClassA import MyClassA, main
if __name__ == '__main__':
MyClassA.property = 'B'
main()
MyClassA.py的代码如下:
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()
MyClassB.py的代码如下:
from MyClassA import MyClassA
class MyClassB(MyClassA):
pass
【问题讨论】: