2015-10-26 2 views
4

Вот пример метод, который находится внутри класса Python:Python декоратор доступ к самостоятельному

def publish_aggregate_account_group_stats(self, account_group_token): 
    message = { 
     "type": "metrics-aggregate-account-group-stats", 
     "accountGroupToken": account_group_token 
    } 
    try: 
     self._get_writer().write(message) 
    except: 
     self._put_cache(message) 

Существует несколько методов в моем классе, что все управляют try/except, что я думаю может быть сушатся вверх или очистить просто создав декоратор, который обрабатывает это для меня. Я просто не знаю, как выглядит декоратор/работа, обратившись к self.

ответ

1

что-то, как это будет работать:

from contextlib import contextmanager 
class Test(object): 
    def __init__(self): 
     self.j = set() 

    @contextmanager 
    def handle_exc(self, msg): 
     try: 
      yield 
     except: 
      print('adding to internal structure:', msg) 
      self.j.add(msg) 

    def test(self): 
     m = 'snth' 
     with self.handle_exc(m): 
      raise Exception('error') 

декоратор жесток, чтобы использовать здесь, потому что вы создаете значения внутри самой функции, так что снаружи декоратор никогда не будет знать о них, если вы не нашли путь к распространять их (через какое-то исключение или что-то подобное).

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