2009-03-16 2 views
2

Я довольно новичок в Python и не смог найти ответ на этот вопрос из поиска в Интернете.В Python можно ли получить доступ к классу, который содержит метод, заданный только для объекта метода?

Вот пример декоратор, который ничего не делает (пока)

def my_decorator(text): 
    def wrap(f): 
    # grab magic f.parent_class_object.my_var and append text 
    def wrap_f(*args, **kwargs): 
     f(*args, **kwargs) 
    return wrap_f 
    return wrap 

Вот пример класса

class MyClass: 
    my_var = [] 

    @my_decorator('sometext') 
    def my_func() 
    # do some super cool thing 

В моем декоратора я хотел бы получить доступ к объекту класса для MyClass и добавить в 'sometext' в список MyClass.my_var. Моя цель - заполнить my_var с украшенными значениями на Загрузка модуля время, а не время вызова функции.

Есть ли способ, которым я могу перемещаться от f до MyClass для этого? Я знаю, что * args [0] является экземпляром MyClass, но это доступно только при вызове функции.

ответ

3

Невозможно прочитать его из функции внутри декоратора класса, так как «методы» по-прежнему являются нормальной функцией при компиляции класса. Кроме того, имя класса не было определено во время компиляции.

Что вы можете сделать, это предоставить список my_var декоратору.

class MyClass: 
    my_var = [] 

    @my_decorator(my_var, 'sometext') 
    def my_func() 
     # do some super cool thing 

my_var до сих пор является обычной переменной.

Смежные вопросы