dhi*_*ill 3 python circular-dependency decorator
我遇到了以下循环导入的情况(这里进行了严重简化):
array2image.py
转换模块:
import tuti
@tuti.log_exec_time # can't do that, evaluated at definition time
def convert(arr):
'''Convert array to image.'''
return image.fromarray(arr)
Run Code Online (Sandbox Code Playgroud)
tuti.py
测试实用程序模块:
import array2image
def log_exec_time(f):
'''A small decorator not using array2image'''
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')
Run Code Online (Sandbox Code Playgroud)
由于名称错误而失败。这对我来说看起来不太正确,因为那里实际上没有循环依赖。我一直在寻找一种巧妙的方法来避免这种情况或解释......在写这个问题的一半时我发现了它。
import
将装饰器移至下方tuti.py
可解决 NameError:
def log_exec_time(f):
'''A small decorator not using array2image'''
import array2image
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')
Run Code Online (Sandbox Code Playgroud)
您提出的答案是一个有效的解决方案。
但是,如果您担心循环依赖关系,我会说 log_exec_time 将属于它自己的文件,因为它不依赖于 tuti.py 中的其他任何内容。
归档时间: |
|
查看次数: |
2453 次 |
最近记录: |