Подтвердить что ты не робот

Найти функции, явно определенные в модуле (python)

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

from datetime import date, datetime

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

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

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

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

4b9b3361

Ответ 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__.

Ответ 5

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

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