Найти - Пользователи
Полная версия: Получить __doc__ у вложенных функций
Начало » Python для новичков » Получить __doc__ у вложенных функций
1
Dezex
Добрый день.
Приходится использовать старенький Python 2.6.6

Привожу шаблон части моего скрипта (шаблон имеет такую же структуру, но не имеет смысла)

 def _func():
    '''Normal ....'''
    import contribs
    print 'top'
    
    def _func_sub_1():
        '''Normal ...'''
        print 'Sub 1'
    
    def _func_sub_2():
        '''Warning-1 ...'''
        a = 5
        print 'Sub_2'
    
    _func_sub_1()
    _func_sub_2()
    contribs._func_import()
    
_func()
exit(0)

Функция _func() далее (не показано) исполнятся подроцессами (через multiprocessing).
Мне нужно получить информацию о вложенны функциях у _func(), а именно степень опасности их применения.
В начале проводится проверка, где нужно подтверждать дальнейшее исполнение при обнаружении опасной вложенной функции.
Вижу два варианта: 1 - через чтение кода скрипта с поиском предупреждающих переменных во вложенных функциях, 2 - через стд атрибуты/методы объектов.

Интересует варианта 2.
Думал сделать это через стд. атрибут __doc__, где указывается степень опасности “Normal”, “Warning”. Но не знаю, как добраться до вложенных функций.
Пока что получил следующее:
 >>> _func.func_code.co_consts
('Normal ....', -1, None, 'top', <code object _func_sub_1 at 0x7f7dc83a9b70, file "./test.py", line 31>, <code object _func_sub_2 at 0x7f7dc83a9468, file "./test.py", line 34>)
>>>_func.func_code.co_consts[4].co_consts
('Normal ...', 'Sub 1', None)
>>>_func.func_code.co_consts[5].co_consts
('Warning-1 ...', 'Warning', 5, 'Sub_2', None)

Проблемы:
1) Я могу отслеживать по первой переменной в .co_consts, но не могу проследить использования вложенной функции в теле функции _func.
2) Не знаю, как добраться до констант импортируемой функции - _func_import()

Как правильно реализовать вариант 2, если можно?


FishHook
Dezex
Мне нужно получить информацию о вложенных функциях
Нет, вам не нужно, внутренние функции - это сугубо инфраструктура объемлющей функции. Функция - “черный ящик”, вам как пользователю функции нужно знать только её интерфейс, никак не внутреннее устройство. Вы же ведь все равно не имеете возможности обратиться к вложенным функциям, вызвать их. Если нужно, то пишите класс, оформляйте все функции методами и получите АПИ класса.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB