【问题标题】:Python Decorator accessing self [duplicate]Python装饰器访问自我[重复]
【发布时间】:2016-01-25 22:05:42
【问题描述】:

这是一个 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 装饰器的外观/工作方式。

【问题讨论】:

    标签: python python-decorators


    【解决方案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')
    

    装饰器在这里很难使用,因为您是在函数本身中创建值,所以外部装饰器永远不会知道它们,除非您找到一种方法将它们向上传播(通过某种异常或其他方式)。

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 2011-11-27
      • 1970-01-01
      • 2012-04-28
      • 2012-07-15
      • 2023-03-26
      • 2012-02-09
      相关资源
      最近更新 更多