微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用单个类作为上下文管理器和装饰器是否不受欢迎?

如何解决使用单个类作为上下文管理器和装饰器是否不受欢迎?

我听到 2 个开发人员之间的讨论,一个反对让同一个对象同时作为上下文管理器和装饰器。 他的论点是,装饰器旨在增强\包装函数,而上下文管理器只是在执行操作时管理数据或状态。

对此是否有共同的同意\不同意?

我个人喜欢在一个对象中包含两个选项。 这是我的意思的粗略示例:

class Example(object):
    """Context manager AND decorator"""
    def __enter__(self):
        return "Entering"
    
    def __exit__(self,*args,**kwargs):
        return "Exiting"
    
    def __call__(self,func):
        def wrapper(*args,**kwargs):
            with self:
                return func(*args,**kwargs)
        return wrapper

with Example():
    # run something
    some_function()

@Example
def some_function():
    pass

解决方法

这更像是一场辩论,而不是一个有具体答案的问题。 有人提到了其中一个内置 Python 模块的示例:https://github.com/python/cpython/blob/3.9/Lib/unittest/mock.py

我会接受这个作为答案,因为我主要是在寻找对此的意见。 感谢评论的人!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。