关于内省:查找模块中明确定义的函数(python)

Find functions explicitly defined in a module (python)

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

1
2
3
4
from datetime import date, datetime

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

即使我使用inspect()过滤掉内置的内容,我仍然可以得到导入的内容。我会看到:

['date'、'datetime'、'test']

有没有办法排除进口?或者另一种方法来找出模块中定义了什么?


你在找这样的东西吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:
'
, list_functions(sys.modules[__name__])
print 'functions in inspect module:
'
, list_functions(inspect)

编辑:将变量名从"meth"更改为"func",以避免混淆(这里我们讨论的是函数,而不是方法)。


以下几点如何?

1
grep ^def my_module.py


您可以检查相关函数的__module__属性。我之所以说"函数",是因为方法通常属于类;-)。

顺便说一句,类实际上也有__module__属性。


python中的每个类都有一个__module__属性。您可以使用它的值来执行过滤。请看下面的示例6.14:深入了解python


python inspect模块可能就是您在这里要查找的。

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