2
私は、円形のインポート(ここでは重度簡体字)の次のケースを持っていた:Python:デコレータを含む循環依存関係を取り除くにはどうすればいいですか?
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
テスト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で失敗しました。実際にそこに循環的な依存がなかったので、これは私には見えませんでした。私はニース方法またはその説明を避けるための方法を探していた...と私はそれを見つけたこの質問を書いて半分。 tuti.py
にデコレータ以下import
を移動
は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')
最適な解決策は、デコレータを別のモジュールに移動し、循環依存性を避けることです。 – codeape
まあ、このような壊れやすい解決策でそれをスカートしようとするよりも、循環依存を完全に避けるほうがずっと良いです。 –
これは明白な回避策であり、理由、なぜ私はすべて尋ねた。私は私のソリューションにもっと満足しています。これは、コードライン機能を4行保有するモジュールを作成することになります。それはJavaです:)...そして、ライセンスの色に合わない... Nah ...アウシュヴィッツ! – dhill