Внутри класса-декоратора, доступ к экземпляру класса, который содержит декорированный метод

У меня есть следующий декоратор, который сохраняет файл конфигурации после того, как метод, украшенный @saveconfig , будет называется:

class saveconfig(object):
    def __init__(self, f):
        self.f = f

    def __call__(self, *args):
        self.f(object, *args)
        # Here i want to access "cfg" defined in pbtools
        print "Saving configuration"

Я использую этот декоратор внутри следующего класса. После вызова метода createkvm объект конфигурации self. cfg должен быть сохранен внутри декоратора:

class pbtools()
    def __init__(self):
        self.configfile = open("pbt.properties", 'r+')
        # This variable should be available inside my decorator
        self.cfg = ConfigObj(infile = self.configfile)

    @saveconfig
    def createkvm(self):
        print "creating kvm"

Моя проблема в том, что мне нужно получить доступ к объектной переменной self.cfg внутри декоратора saveconfig . Первым наивным подходом было добавление параметра к декоратору, который содержит объект, например @saveconfig (self) , но это не сработало.

Как я могу получить доступ к объектным переменным хоста метода внутри декоратора? Должен ли я определять декоратор внутри того же класса, чтобы получить доступ?

9
задан Ingo Fischer 13 February 2011 в 23:10
поделиться