2

次の循環インポートのケースがありました(ここでは大幅に簡略化されています)。

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.pyutilsモジュールのテスト:

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.pyNameErrorが解決されます。

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

import array2image

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

1 に答える 1

4

あなたが思いついた答えは有効な解決策です。

ただし、循環依存関係について心配している場合は、log_exec_time は tuti.py の他のものに依存していないため、独自のファイルに属していると言えます。

于 2009-07-29T05:45:20.513 に答える