正在动态位置加载 class 未知名称
Loading a class of unknown name in a dynamic location
目前正在解压文件到操作系统的temp目录下。其中一个文件是 Python 文件,其中包含我需要处理的 class。 Python 的文件已知,但文件中 class 的名称未知。但可以安全地假设,只有一个 class,并且 class 是另一个 class 的子class。
我尝试使用 importlib
,但我无法获得 class 的句柄。
到目前为止我尝试了:
# Assume
# module_name contains the name of the class and -> "MyClass"
# path_module contains the path to the python file -> "../Module.py"
spec = spec_from_file_location(module_name, path_module)
module = module_from_spec(spec)
for pair in inspect.getmembers(module):
print(f"{pair[1]} is class: {inspect.isclass(pair[1])}")
当我遍历模块的成员时,none 被打印为 class。
我的 class 在这种情况下称为 BasicModel
并且控制台上的输出如下所示:
BasicModel is class: False
正确的做法是什么?
编辑:
由于请求了文件的内容,现在开始:
class BasicModel(Sequential):
def __init__(self, class_count: int, input_shape: tuple):
Sequential.__init__(self)
self.add(Input(shape=input_shape))
self.add(Flatten())
self.add(Dense(128, activation=nn.relu))
self.add(Dense(128, activation=nn.relu))
self.add(Dense(class_count, activation=nn.softmax))
使用dir()
获取文件的属性,使用inspect
检查属性是否为class。如果是这样,您可以创建一个对象。
假设您的文件路径是 /tmp/mysterious
您可以这样做:
import importlib
import inspect
from pathlib import Path
import sys
path_pyfile = Path('/tmp/mysterious.py')
sys.path.append(str(path_pyfile.parent))
mysterious = importlib.import_module(path_pyfile.stem)
for name_local in dir(mysterious):
if inspect.isclass(getattr(mysterious, name_local)):
print(f'{name_local} is a class')
MysteriousClass = getattr(mysterious, name_local)
mysterious_object = MysteriousClass()
目前正在解压文件到操作系统的temp目录下。其中一个文件是 Python 文件,其中包含我需要处理的 class。 Python 的文件已知,但文件中 class 的名称未知。但可以安全地假设,只有一个 class,并且 class 是另一个 class 的子class。
我尝试使用 importlib
,但我无法获得 class 的句柄。
到目前为止我尝试了:
# Assume
# module_name contains the name of the class and -> "MyClass"
# path_module contains the path to the python file -> "../Module.py"
spec = spec_from_file_location(module_name, path_module)
module = module_from_spec(spec)
for pair in inspect.getmembers(module):
print(f"{pair[1]} is class: {inspect.isclass(pair[1])}")
当我遍历模块的成员时,none 被打印为 class。
我的 class 在这种情况下称为 BasicModel
并且控制台上的输出如下所示:
BasicModel is class: False
正确的做法是什么?
编辑:
由于请求了文件的内容,现在开始:
class BasicModel(Sequential):
def __init__(self, class_count: int, input_shape: tuple):
Sequential.__init__(self)
self.add(Input(shape=input_shape))
self.add(Flatten())
self.add(Dense(128, activation=nn.relu))
self.add(Dense(128, activation=nn.relu))
self.add(Dense(class_count, activation=nn.softmax))
使用dir()
获取文件的属性,使用inspect
检查属性是否为class。如果是这样,您可以创建一个对象。
假设您的文件路径是 /tmp/mysterious
您可以这样做:
import importlib
import inspect
from pathlib import Path
import sys
path_pyfile = Path('/tmp/mysterious.py')
sys.path.append(str(path_pyfile.parent))
mysterious = importlib.import_module(path_pyfile.stem)
for name_local in dir(mysterious):
if inspect.isclass(getattr(mysterious, name_local)):
print(f'{name_local} is a class')
MysteriousClass = getattr(mysterious, name_local)
mysterious_object = MysteriousClass()