Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2017 14:33:27

Dezex
Зарегистрирован: 2015-12-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить __doc__ у вложенных функций

Добрый день.
Приходится использовать старенький 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, если можно?


Отредактировано Dezex (Авг. 16, 2017 16:34:32)

Офлайн

#2 Авг. 16, 2017 17:31:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Получить __doc__ у вложенных функций

Dezex
Мне нужно получить информацию о вложенных функциях
Нет, вам не нужно, внутренние функции - это сугубо инфраструктура объемлющей функции. Функция - “черный ящик”, вам как пользователю функции нужно знать только её интерфейс, никак не внутреннее устройство. Вы же ведь все равно не имеете возможности обратиться к вложенным функциям, вызвать их. Если нужно, то пишите класс, оформляйте все функции методами и получите АПИ класса.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version