仅在模块中使用时装饰功能

时间:2018-01-09 16:03:35

标签: python python-decorators

如果问题标题含糊不清,我很抱歉,我想不出更好的问题。

我在模块中有很多函数,我希望在本地调用时与从其他模块调用时表现不同。

这是一个玩具示例 moduleA.py

def func(arg1):
     pass
     do something

moduleB.py

import moduleA
func(arg1) 

在moduleB中,func()的调用需要

initSomething
func(arg1)
doSomethingElse

当从moduleA调用func()时,我仍然需要原始行为。 虽然这个问题让我对使用装饰器感到尖叫,但我不确定是否会为func()编写一个仅在从模块调用时才会触发的装饰器。

1 个答案:

答案 0 :(得分:2)

听起来你想要给函数调用一个特定的上下文。这就是上下文管理器的用途。你可以这样做:

from contextlib import contextmanager

@contextmanager
def func_context():
    # init_something
    yield
    # do_something_else

with func_context():
    func(arg1)