繁体   English   中英

如果从B调用Af,如何在模块A中定义Af以获得在B中定义的功能的列表

[英]How can A.f defined in module A get list of function defined in B if A.f was called from B

假设我有B.py

import A

def F():
    pass

def G():
    pass

if __name__ == '__main__':
    A.f()

当我运行它时,我希望Af这样输出B.py定义的函数列表

./B.py
['F', 'G']

问题是我应该用A.py写什么?

def f():
    ???

似乎有可能是因为doctest做了这样的事情。

更新感谢您的答复,但我忘了再提一个限制:我不想在A.py import B

让我尝试解释原因: A.py是用于运行MapReduce作业的库。 您只需导入A并在脚本的不同结尾处运行一些Af 然后Af您定义的功能并在服务器上执行它们。 因此, Af无法导入从其调用的每个模块。

可以吗 函数可以知道从哪里调用它吗?

更新

def f():
    module = sys.modules['__main__']
    functions = inspect.getmembers(module, inspect.isfunction)
    ...
def f():
    import B
    import inspect

    functions=inspect.getmembers(B,inspect.isfunction)

http://docs.python.org/library/inspect.html#inspect.getmembers

编辑

我还没有尝试过,但是看来您可以将模块作为参数传递给f并使用它。

def f(mod):
    import inspect
    functions=inspect.getmembers(mod,inspect.isfunction)
    return functions

然后,从B,您可以执行以下操作:

import sys
import A
myfuncs=A.f(sys.modules[__name__])

使用dir()函数实际上很容易做到:

import B

def f():
    print(dir(B))

这使:

['A', 'F', 'G', '__builtins__', '__cached__', '__doc__', '__file__', '__name__', '__package__']

如您所见,这确实包括通常看不见的模块中存在的隐藏值。 如果您想更具体地了解所需内容,请查看inspect模块

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM