使用单个 class 作为上下文管理器和装饰器是否令人不悦?

Is using a single class as both a Context Manager and a Decorator frowned upon?

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

有没有共同点agreement\disagreement?

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

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

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