Найти функции, явно определенные в модуле (python)
Хорошо. Я знаю, что вы можете использовать метод dir() для перечисления всего в модуле, но есть ли способ увидеть только те функции, которые определены в этом модуле? Например, предположим, что мой модуль выглядит следующим образом:
from datetime import date, datetime
def test():
return "This is a real method"
Даже если я использую функцию проверки(), чтобы отфильтровать встроенные функции, мне все равно осталось что-либо импортированное. Например, я увижу:
['date', 'datetime', 'test']
Есть ли способ исключить импорт? Или другой способ узнать, что определено в модуле?
Ответы
Ответ 1
Вы ищете что-то вроде этого?
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)
EDIT: Изменены имена переменных от "meth" до "func", чтобы избежать путаницы (здесь мы имеем дело с функциями, а не с методами).
Ответ 2
Как насчет следующего:
grep ^def my_module.py
Ответ 3
Вы можете проверить атрибут __module__
данной функции. Я говорю "функция", потому что метод принадлежит обычному классу; -).
BTW, класс также имеет атрибут __module__
.
Ответ 4
Каждый класс в python имеет атрибут __module__
. Вы можете использовать его значение для фильтрации. Взгляните на пример 6.14 в режиме погружения в python
Ответ 5
модуль python inspect, вероятно, вы ищете здесь.
import inspect
if inspect.ismethod(methodInQuestion):
pass # It a method