python - 如何动态导入类?
问题描述
我有四个文件:main.py
、MainClass.py
、SigClass.py
和MyClassC.py
. 条目是main.py
。我重写了 in 的函数function_a
,MyClassA
所以MyClassC
需要设置SigClass
inmain.py
sig
属性,所以 MainClass 继承MyclassC
了MyclassA
in MainClass.py
。我的代码如下,不继承function_a
.MyClassC
我尝试了很多方法,但我只能在空间中实现我的目标,而在TempClass
空间中却做不到。main()
MainClass.py
__main__
MainClass.py
TempClass
空间中的怎么main()
能被其他文件引用呢?我实在想不出办法。
如何修改代码?或者还有其他方法吗?
示例代码如下:
主要.py:
from MainClass import SigClass, main
SigClass.sig = "MyClassC"
main()
from MainClass import MainClass
MainClass.function_a()
print(MainClass.property)
主类.py:
from time import time
from SigClass import SigClass
import importlib
sig = SigClass.sig
class MyClassA:
sig = '1'
property = 'A'
@classmethod
def function_a(cls):
cls.property = 'A'
class MainClass:
pass
def main():
module_name = SigClass.sig
class_name = SigClass.sig
module_object = importlib.import_module(module_name)
module_class_object = getattr(module_object, class_name)
class TempClass(module_class_object, MyClassA):
pass
global MainClass
MainClass = TempClass
信号类.py
class SigClass:
sig = 1
MyClassC.py
from MainClass import MyClassA
class MyClassC(MyClassA):
@classmethod
def function_a(cls):
cls.property = 'c'
pass
解决方案
感谢@2e0byo 的提示,我认为以下代码最能满足我的需求:
导入MyClassC
据SigClass.sig
,SigClass.sig
也是最重要的部分MainClass
。
class BaseClass:
name = None
pass
class SigClass(BaseClass):
name = "SigClass"
sig = 1
class MyClassA(BaseClass):
name = "MyClassA"
property = 'A'
sig = 'a'
@classmethod
def function_a(cls):
pass
class MyClassC(MyClassA):
name = "MyClassC"
property = "C"
sig = 'c'
@classmethod
def function_a(cls):
pass
class ClassCollections(BaseClass):
classes: dict = {}
@classmethod
def add_class(cls, class_to_add: type(BaseClass)):
cls.classes[class_to_add.name] = class_to_add
SigClass.sig = "MyClassC"
ClassCollections.add_class(MyClassA)
ClassCollections.add_class(MyClassC)
class MainClass(SigClass, ClassCollections.classes[SigClass.sig], MyClassA):
pass
print(MainClass.sig)
MyClassC
推荐阅读
- php - 验证失败时如何在 Symfony 4 中获取表单字段的值?
- php - 为“item”表创建(复合)主键,其中增量“item_id”根据“order_id”外键重置
- regex - Python3 - 在写入文件之前过滤文本
- java - JSF 页面中组件(面板)的可变顺序
- excel - 自动在excel上创建分层数据(组织结构图)
- python - 我正在编写一个递归函数,它将根据 n 创建存储桶
- json - 无法为我的“地图”赋值
` json-decode 后的变量 - node.js - Visual Studio Code 调试器将 node_module 映射到本地文件夹
- sql - 使用视图中的动态变量创建数据透视表
- python - 不推荐使用基本身份验证时的 Python O365 身份验证