首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从其他动态创建的文件中调用函数| Python

如何从其他动态创建的文件中调用函数| Python
EN

Stack Overflow用户
提问于 2018-06-23 16:53:36
回答 1查看 157关注 0票数 0

我有一个python程序

main.py

并且我使用此函数从文件夹导入所有动态创建的文件:

代码语言:javascript
复制
def loadImports(path):
files = os.listdir(path)
imps = []

for i in range(len(files)):
    name = files[i].split('.')
    if len(name) > 1:
        if name[1] == 'py' and name[0] != '__init__':
           name = name[0]
           imps.append(name)

file = open(path+'__init__.py','w')

toWrite = '__all__ = '+str(imps)

file.write(toWrite)
file.close()

loadImports('MyDIR/')
from MyDIR import *

有几个脚本:

代码语言:javascript
复制
 first.py
 second.py
 third.py

每个脚本都有一个函数:

代码语言:javascript
复制
def play():
    pass

当我从main.py调用它时,它工作得很好,如下所示:

代码语言:javascript
复制
    def myCall(self):
        first.play()

    self.myCall()

但是我有一个tkinter comboBox,我想从其中选择脚本的名称,例如:

优先

这样叫它:

代码语言:javascript
复制
    def myCall(self):
        name = self.myComboBox.get()
        name.play()

    self.myCall()

但是有一个错误:

Tkinter回调跟踪中出现

异常(最近一次调用):

文件"/usr/lib/python2.7/lib-tk/Tkinter.py",第1544行,在call return self.func(*args)文件"PATH/main.py",第1183行,在myCall name.play() AttributeError中:'str‘对象没有属性'play’

我怎么才能修复它呢?

EN

回答 1

Stack Overflow用户

发布于 2018-06-23 21:03:25

你可以使用eval(),但首先要了解它的危险:Eval really is dangerous

代码语言:javascript
复制
eval('{}.play()'.format(name))

字符串的结果是:first.play() (如果名称==‘first’显然是...)然后eval运行它。

更新

我想了一个更好的方法,不使用eval

创建一个字典,在加载的模块名称和对模块的引用之间建立关联。

代码语言:javascript
复制
""" Module first.py contains:
def play(recording):
    print('Playing:', recording)
"""

import first

first.play('Testing')           # Testing that it works

module_dict = {'first': first}  # Creating a dict with associations between
                                # names and module references

module = module_dict.get('first', None) # Get reference from name
                                        # Returns None if no module found

if module: module.play('For real') # Use function from named module if not None
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50999539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档