2013-03-30 63 views
0

我正在使用SimPy,並嘗試模擬網絡。如何在不同模塊中啓用對象之間的交互

這是我的主要模塊:

from SimPy.Simulation import * 
import node0 
import message0 
import network0 
reload (message0) 
reload (node0) 
reload(network0) 
initialize() 
topology=network0.Network() 
activate(topology, topology.operate()) 
node1=node0.Node(1) 
node1.interface.send(destination='node1') 
simulate(until=25) 

我想類消息,它是由類節點的目的活化的目的,對interrrupt

class Message(Process): 
    def arrive(self, destination, myEvent=delay): 

     self.destination=destination 
     self.interrupt(topology) 

Network (topology)類的對象。

但我發現了一個錯誤:

NameError: global name 'topology' is not defined 

我不知道如何使一個對象全局。如果我在python shell中輸入拓撲結構,那麼它會顯示對象拓撲結構,爲什麼不能在消息中看到它?

回答

0

我很確定問題是您的Message類是在與您的topology變量所在的模塊不同的模塊中定義的。 Python中所謂的「全局」變量並不是真正的全局變量(從一種全局命名空間的意義上來說),而只是位於特定模塊命名空間的頂部。因此,主模塊名稱空間中的全局變量topology不能作爲來自不同模塊的全局變量訪問。

我的建議是通過將拓撲值傳遞給Message作爲__init__方法的參數來解決這個問題。如果消息是由您自己的代碼以外的其他東西創建的(例如,您的類爲Node),則可能需要將它傳遞給更多,以便在需要時可用。

如果這是不可能的,您可能可以將拓撲值置於可由Message代碼導入的模塊的名稱空間中。儘管如此,這可能會變得混亂,因爲如果你不小心的話,循環導入會破壞事物。

相關問題