gpt4 book ai didi

python - 如何与 getattr() 结合使用 lambda : in python? 动态加载 python 模块

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:46 28 4
gpt4 key购买 nike

环境(它是一个名为 nuke 的图形程序)提供了一个全局对象,我可以在其中添加菜单项并将其与函数连接。这个全局对象是这样工作的:

menu.addCommand("Do This!", lambda: DoThings())

我想动态读取 python 模块并将模块函数作为项目添加到全局菜单对象中。我写了一个类来做到这一点。我的类(class)的简化版本:

class mymenu():
.
.
.
def _builMenuFromPath(self, basepath, module):

items = []

# ...
# there is code to build the items list. this is a list of the python filenames
# ...

if len(items) > 0:

for item in items:

try:
f = getattr(__import__(module + "." + item), item) # item is the python filename of an module in the folder with the python files and module is the folder

menu.addCommand(item, lambda: f.call()) # f.call() is a function in the dynamic loaded python file

except Exception, e:
pass

动态导入效果很好。但是每个生成的菜单项都链接到最后导入的函数。这样每个菜单项都做同样的事情。

我不是专业程序员。所以我认为我犯了一个简单的错误。

感谢您的帮助。

最佳答案

尝试传递 f.call 而不是 lambda:f.call()。

关于python - 如何与 getattr() 结合使用 lambda : in python? 动态加载 python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421346/

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