正如标题所述,有没有办法做到这样的事情:
def call_back():
if called inside context:
print("running in context")
else:
print("called outside context")
这将导致:
with CTM() as context:
call_back()
call_back()
>>> "running in context"
>>> "called outside context"
1条答案
按热度按时间eivnm1vs1#
正如@chepner在问题的评论中所写的
我认为不使用
inspect
模块是不可能的。with语句中的代码块没有什么特别之处,除了保证context.__enter__
在执行之前被调用,context.__exit__
在执行之后被调用。然后@larsks建议如果你有控制上下文管理器...
...您可以更新某些全局或对象特定的状态,以指示您是否在上下文管理器中。
这似乎是@new-dev-123最终采用的解决方案。
这里有一个解决方案:
第一个
如果您希望多个方法具有相同的行为,或者保持职责分离,则可以使用装饰器。