从另一个文件中的函数获取属性

时间:2018-04-23 12:46:36

标签: python

我有一个主文件正在查看/ modules /文件夹中的文件,它需要查看每个.py文件并查找具有特定属性的所有函数。 一个示例模块将是这样的:

def Command1_1():
    True
Command1_1.command = ['cmd1']

def Command1_2():
    True

我目前用来查看每个文件和函数的代码是:

for module in glob.glob('modules/*.py'):
    print(module)
    tree = ast.parse(open(module, "rt").read(), filename=PyBot.msggrp + module)

    for item in [x.name for x in ast.walk(tree) if isinstance(x, ast.FunctionDef)]:
        if item is not None:
            print(str(item))

下面是代码生成的内容,但我找不到一种方法来显示函数是否具有" .command"属性:

modules/Placeholder001.py
Command1_1
Command1_2
modules/Placeholder002.py
Command2_1
Command2_2
Command2_3

1 个答案:

答案 0 :(得分:0)

最简单的方法是导入每个文件,然后在其全局范围内查找函数。可以使用callable来识别函数。检查函数是否具有属性可以使用hasattr完成。

从路径导入模块的代码取自this answer

from pathlib import Path
import importlib.util

def import_from_path(path):
    spec = importlib.util.spec_from_file_location(path.stem, str(path))
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

for module_path in Path('modules').glob('*.py'):
    module = import_from_path(module_path)

    for name, value in vars(module).items():
        if callable(value):
            has_attribute = hasattr(value, 'command')
            print(name, has_attribute)

输出:

Command1_1 True
Command1_2 False