2016-08-18 104 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

醜陋而快速的方法是將其中一個導入作爲本地導入(在類或方法中)。 – 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_)