使用字符串从其他模块调用函数

时间:2019-07-08 19:20:15

标签: python python-3.x

基本上是为小型项目实施运行时多态性的, 我想通过从文件中存储的函数列表中获取其名称并以任何顺序调用它们来决定在运行时运行哪个函数。 这些方法不返回任何内容并且可以互换。

方法/函数位于我创建的其他程序包中,每个方法/函数都有自己的.py文件,

我尝试将软件包整体导入/从软件包导入* /在所有情况下都分别导入单个.py文件

我已经尝试过了,但是它只显示了驻留在同一文件中的函数示例

https://docs.python.org/3/faq/programming.html#how-do-i-use-strings-to-call-functions-methods

运行到KeyError中,也未找到或属性错误 任何帮助或指导将不胜感激

目录结构如下

Project
 |
 +-- src
 |  |  
 |  +-- __init__.py
 |  +-- auto_detection.py
 |    
 +-- starter.py

让我们说auto_detection.py中有一种方法

# -*- coding: utf-8 -*-

def Automatic_detection():
    print("Automatic Detection is running ")

starter.py类似于

# -*- coding: utf-8 -*-


import src.auto_detection


func="src.auto_detection.Automatic_detection"

src.auto_detection.Automatic_detection()  # This Works

f = globals()[func] # this gives the error "KeyError: 'src.auto_detection.Automatic_detection'"
f()

g = locals()[func] # this gives the error "KeyError: 'src.auto_detection.Automatic_detection'"
g()

h = getattr("src.auto_detection","Automatic_detection") #this produces error " AttributeError: 'str' object has no attribute 'Automatic_detection'
h()

getattr("src.auto_detection","Automatic_detection")() #AttributeError: 'str' object has no attribute 'Automatic_detection'

谁能指出我在做什么错

0 个答案:

没有答案