Предполагая, что у меня есть декоратор и обернутая функция:Путь импорта для обернутой декоратором функции?
def squared(method):
def wrapper(x, y):
return method(x*x, y*y)
return wrapper
@squared
def sum(x, y):
return x+y
У меня есть другой код, который хотел бы назвать недекорированную версию функции sum
. Есть ли трюк для импорта, который может привлечь меня к этому развернутому методу? Если мой код говорит from some.module.path import sum
, тогда я получаю завернутую версию метода sum
, чего я не хочу в этом случае. (Да, я знаю, что я мог бы разбить это на вспомогательный метод, но это нарушает некоторую чистоту рисунка, который я собираюсь здесь.)
Я в порядке с добавлением дополнительной «магии» к декоратору для предоставления некоторого альтернативного имени символа (например, orig_sum
), который я мог бы затем импортировать, я просто не знаю, как это сделать.
Из другого исходного файла, можно ли «из foo.squared.wrapper import orig as sum'? – slacy
@slacy, я должен сказать, что ИМО, что вы предлагаете, гораздо менее «чист», чем версия декоратора Райнера Геркеке. – senderle
Кстати, даже лучше было бы 'setattr (wrapped, method .__ name__, method)' :) – slacy