Как связать класс класса внутри определения класса? Не могли бы вы посоветовать мне, как вы это сделаете? Или более конкретно, как передать объект класса внутри декоратора метода класса? Вот простой пример: я пытаюсь передать второй метод, который я объявляю декоратору первого.Определение самооценки внутри класса
def decorate(w):
def _wrap(f):
def _call(*args, **kwargs):
return w(f(*args, **kwargs))
def _call
return _wrap
class A():
@dec(A.w)
def f():
return 2
def w(f):
return fr + 5
Как и ожидалось, возбуждается исключение
NameError: name 'A' is not defined
В результате моего исследования я узнал, что globals()
не содержит A
ключ в то время как я нахожусь внутри decorate
или _wrap
функции, но определенные внутри _call
. Поэтому я мог бы, вероятно, найти переданный метод по имени строки (например, @dec('A.w')
), но в этом случае невозможно кэшировать поиск метода внутри _wrap
закрытия.
Итак, как вы это исправите? :)
Класс еще не существует, пока он определяется. Кроме того, 'w' не существует, когда' f' определяется, потому что 'w' появляется после' f' в файле. Если вы переместите 'w' сначала, вы можете заставить его работать, используя' @dec (w) '. – BrenBarn
В этой ситуации это похоже на то, что вам передают сложное уравнение и сразу, прежде чем вы сможете прикоснуться к бумаге, вам будет задан точный ответ – PurityLake