Python:如何摆脱涉及装饰器的循环依赖?

时间:2009-07-29 05:31:20

标签: python decorator circular-dependency

我有一个循环导入的例子(这里严格简化):

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)

tuti.py test utils模块:

import array2image

def log_exec_time(f):
    '''A small decorator not using array2image'''

def debug_image(arr):
    image = array2image.convert(arr)
    image = write('somewhere')

NameError失败了。这对我来说并不合适,因为那里确实没有循环依赖。我正在寻找一种整洁的方式来避免这种情况或解释......在写这个问题的一半时间我找到了它。

移动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')

1 个答案:

答案 0 :(得分:4)

您提出的答案是有效的解决方案。

但是,如果您担心循环依赖,我会说log_exec_time属于自己的文件,因为它不依赖于tuti.py中的任何其他内容。