[英]How to enable interaction between object in different modules
我正在使用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)
我希望由類節點的對象激活的類消息對象中斷
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中輸入拓撲,那么它將顯示對象拓撲,那么為什么看不到消息呢?
我敢肯定,問題在於您的Message
類是在與topology
變量所在的模塊不同的模塊中定義的。 Python中所謂的“全局”變量並不是真正的全局(從某種意義上說,只有一個全局名稱空間),而是位於特定模塊名稱空間的頂部。 因此,主模塊名稱空間中的全局變量topology
不能作為其他模塊中的全局變量進行訪問。
我的建議是通過將拓撲值作為__init__
方法的參數傳遞給Message
來解決此問題。 如果消息不是由您自己的代碼(例如,由Node
類)創建的,則可能需要傳遞更多消息,以便在需要時可用。
如果這不可能,則可以將拓撲值放在Message
代碼可以導入的模塊的命名空間中。 但是,這可能會變得混亂,因為如果您不小心的話,循環導入會破壞事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.