2016-08-18 18 views
0

私は次のセットアップを持っている:循環依存を避けるためにこれをどのようにリファクタリングするのですか?

# generator.py 
from node import Node 

class Generator(object): 
    @staticmethod 
    def generate(self, node): 
    return [Node(), Node(), Node()] 

# node.py 
from generator import Generator 

class Node(object): 
    def generate_child_nodes(self): 
    self.child_nodes = Generator.generate(self) 

このオーバー簡素化セットアップが循環依存関係の問題を引き起こしています。

私は一般的に、別のモジュール(この場合はgenerator.py)を使用して、クラスのインスタンスを作成する(親子関係を模倣するなど)必要があります。このよう

+0

移動機能への輸入の一つ、またはクラス定義の後に。 – davidism

+0

醜い速い方法は、インポートの1つを(クラスまたはメソッド内の)ローカルインポートとして持つことです。 – DeepSpace

+0

代替アプローチ:すでに渡されたノードインスタンスに基づいて、それぞれのノードクラスを動的に 'generate()'インスタンス化しますか?例えば。 'return [node .__ class __()、node .__ class __()、node .__ class __()]' –

答えて

0

# generator.py 

class Generator(object): 
    @staticmethod 
    def generate(self, node): 
    from node import Node 
    return [Node(), Node(), Node()] 

# node.py 
from generator import Generator 

class Node(object): 
    def generate_child_nodes(self): 
    self.child_nodes = Generator.generate(self) 
0

generator.py

def generate(n): 
    for a in range(3): 
     yield n() 

node.py

from generator import generate 
class Node: 
    def __init__(self): 
     self.id_ = id(self) 
for n in generate(Node): 
    print(n.id_) 
関連する問題