我有以下情况的循环导入(在此进行了简化):

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测试工具模块:

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

最佳答案

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

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

关于python - Python:如何摆脱涉及装饰器的循环依赖?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1198188/

10-12 17:54