Python装饰器访问自我[重复]

Posted

技术标签:

【中文标题】Python装饰器访问自我[重复]【英文标题】:Python Decorator accessing self [duplicate] 【发布时间】: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 装饰器的外观/工作方式。

【问题讨论】:

【参考方案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')

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

【讨论】:

以上是关于Python装饰器访问自我[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python装饰器,自我混淆[重复]

“@”装饰器(在 Python 中)[重复]

python属性装饰器[重复]

python装饰器参数[重复]

从装饰器访问自我

这个属性装饰器(python)有啥问题[重复]