簡體   English   中英

如何啟用不同模塊中的對象之間的交互

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM