我用包装器在程序中停靠Qt窗口。问题是包装器将任何窗口类作为str
,然后稍后对其进行初始化,如果您在多个文件上拆分了内容,那么它就不是很pythonic了(请参阅原始编辑了解它的工作原理,但这对问题并不重要)。你知道吗
例如:
import module.submodule.MainWindow
:路径是"module.submodule.MainWindow"
import module.submodule.MainWindow as MW
:路径是"MW"
from module import submodule
:路径是"submodule.MainWindow"
我目前的解决方法是module.MainWindow.shpw(namespace="module.MainWindow")
,但我不希望被要求将其作为参数提供
我试着创建一个函数来解析globals()
以找到路径,它在顶层的工作非常好。但是,我发现globals()
对于每个导入都是唯一的,所以当从模板类中调用时它什么也不做。你知道吗
from types import ModuleType
import inspect
import site
site_packages_loc = site.getsitepackages()
default_modules = set([sys.modules[i] for i in set(sys.modules.keys()) & set(sys.builtin_module_names)])
def get_class_namespace(search, globals_dict=None, path=[]):
if globals_dict is None:
globals_dict = globals()
#Find all objects that are modules
modules = {}
for k, v in globals_dict.iteritems():
if v == search:
return '.'.join(path + [v.__name__])
if isinstance(v, ModuleType) and v not in default_modules:
modules[k] = v
#Check recursively in each module
for k, v in modules.items():
#Check it's not a built in module
module_path = inspect.getsourcefile(v)
if any(module_path.startswith(i) for i in site_packages_loc):
continue
module_globals = {func: getattr(v, func) for func in dir(v)}
return_val = get_class_namespace(search, module_globals, path=path+[k])
if return_val is not None:
return return_val
有没有更好的方法来解决这个问题,或者我可以从导入中请求最顶层的globals()
?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐