查找模块中明确定义的函数(python)

时间:2009-07-09 22:49:04

标签: python introspection

好的我知道你可以使用dir()方法列出模块中的所有内容,但有没有办法只查看该模块中定义的函数?例如,假设我的模块如下所示:

from datetime import date, datetime

def test():
    return "This is a real method"

即使我使用inspect()过滤掉内置函数,我仍然会留下任何导入的东西。 E.g我会看到:

['date','datetime','test']

有没有办法排除进口?或者另一种方法来找出模块中定义的内容?

5 个答案:

答案 0 :(得分:26)

你在找这样的东西吗?

import sys, inspect

def is_mod_function(mod, func):
    return inspect.isfunction(func) and inspect.getmodule(func) == mod

def list_functions(mod):
    return [func.__name__ for func in mod.__dict__.itervalues() 
            if is_mod_function(mod, func)]


print 'functions in current module:\n', list_functions(sys.modules[__name__])
print 'functions in inspect module:\n', list_functions(inspect)

编辑:将变量名称从'meth'更改为'func'以避免混淆(我们在处理函数,而不是方法)。

答案 1 :(得分:4)

以下内容如何:

grep ^def my_module.py

答案 2 :(得分:2)

您可以检查相关功能的__module__属性。我说“函数”因为一个方法通常属于一个类; - )。

顺便说一句,一个班级实际上也有__module__属性。

答案 3 :(得分:1)

python中的每个类都有一个__module__属性。您可以使用其值来执行过滤。看看example 6.14 in dive into python

答案 4 :(得分:0)

python inspect模块可能就是你在这里寻找的。

import inspect
if inspect.ismethod(methodInQuestion):
    pass # It's a method