Найти функции, явно определенные в модуле (python) - PullRequest
21 голосов
/ 10 июля 2009

Хорошо, я знаю, что вы можете использовать метод dir () для отображения всего в модуле, но есть ли способ увидеть только функции, которые определены в этом модуле? Например, предположим, что мой модуль выглядит так:

from datetime import date, datetime

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

Даже если я использую inspect () для фильтрации встроенных функций, мне все равно остается все, что было импортировано. Например, я посмотрю:

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

Есть ли способ исключить импорт? Или другой способ узнать, что определено в модуле?

Ответы [ 5 ]

26 голосов
/ 10 июля 2009

Вы ищете что-то подобное?

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', чтобы избежать путаницы (здесь мы имеем дело с функциями, а не методами).

4 голосов
/ 10 июля 2009

Как насчет следующего:

grep ^def my_module.py
2 голосов
/ 10 июля 2009

Вы можете проверить __module__ атрибут рассматриваемой функции. Я говорю «функция», потому что метод обычно принадлежит классу; -).

Кстати, класс на самом деле также имеет атрибут __module__.

1 голос
/ 10 июля 2009

Каждый класс в Python имеет атрибут __module__. Вы можете использовать его значение для выполнения фильтрации. Взгляните на пример 6.14 в погружении в питона

0 голосов
/ 10 июля 2009

модуль python inspect , вероятно, то, что вы ищете здесь.

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