gpt4 book ai didi

python - 获取重新创建对象所需的导入

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:38 25 4
gpt4 key购买 nike

给定在导入代码期间生成的对象,生成执行该对象创建代码所需的一组导入。

案例1:

some_obj = module.submodule.Class(42)
get_imports for_object(some_obj)
>>> "import module.submodule"

情况 2(有时根模块不会自动导入子模块(例如 Airflow 运算符)):

some_obj = submodule.Class(42)
get_imports for_object(some_obj)
>>> "from module import submodule"

案例 3(延伸目标):

some_obj = submodule.Class(sub2.Class2(42))
get_imports for_object(some_obj)
>>> ["from module import submodule", "from module2 import sub2"]

目标是生成导入行,以便将它们添加到对象实例化代码之前将使实例化工作。

最佳答案

这样就可以了:

def get_object_imports(obj, sub_obj_class_name=None):
sub_obj_modules = []
if sub_obj_class_name is not None:
for _, attribute_value in obj.__dict__.items():
value_str = str(getattr(attribute_value,'__class__',''))
if ('.' + sub_obj_class_name) in value_str:
sub_obj_modules.append(attribute_value.__module__)

if sub_obj_modules != []:
sub_module_imports = [('import ' + sub_obj_module) for sub_obj_module
in sub_obj_modules]
return ['import ' + obj.__module__] + sub_module_imports
else:
return 'import ' + obj.__module__

情况 (1) 和 (2) 是等效的,因为运行任一者都会导入相同的模块。请注意,在上面,将包含具有相同类名但不同模块源的对象。

<小时/> 演示:

from module import class1
from other_module import submodule

obj1 = class1()
obj2 = obj1(submodule.class2())

print(get_object_imports(obj2, 'class2'))
# ['import module', 'import other_module.submodule']

关于python - 获取重新创建对象所需的导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58124654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com