У меня есть декоратор, но я хотел бы сохранить исходную функцию в пространстве имен для дальнейшего использования, чтобы в итоге у меня была украшенная и не украшенная версия функции. Я вставляю эту исходную функцию в пространство имен следующим образом:
def crossover(cross):
def ecspy_crossover(random, candidates, args):
# ... decorator magic
globals()['single_'+cross.func_name] = cross
Однако, когда я импортирую модуль, функции single_* не отображаются. Когда я запускаю pdb в этом модуле, эта функция присутствует в пространстве имен... [в этом модуле нет __all__
statement...]
Любые идеи?
single_*
, пока вы не выполнитеcrossover()
один или несколько раз, что не произойдет волшебным образом при импорте модуля. Вы можете добавить к нему некоторые вызовы на уровне модуля вне каких-либо других функций или определений методов, и они будут выполнены, после чего будут созданыsingle_*
имена функций. - person martineau   schedule 22.02.2011