2013-05-03 67 views
0

我是一名python新手,並使用CherryPy Web Server和Jinja 2模板引擎開發我的第一個python應用程序。在python中如何從父模塊或頂級模塊訪問父類或頂級模塊的實例使用子模塊

我使用Velleman K8055 USB實驗板,它有一個我正在導入的python模塊。

爲了使K8055正常工作,我必須在K8055模塊內創建一個類的實例,然後打開與主板的連接......據我所知,我必須保持連接/實例運行,並使用該唯一的實例來控制電路板,即使是在子模塊內也是如此。

我有一個很難搞清楚如何從我的子模塊/包內訪問K8055先前初始化實例...

我有非常類似以下內容的應用程序結構.. 。

SmartyPi/ 
SmartyPi/smartypi.py 
SmartyPi/smartypi/__init__.py 
SmartyPi/smartypi/scheduler/ 
SmartyPi/smartypi/scheduler/__init__.py 
SmartyPi/smartypi/scheduler/Scheduler.py 
SmartyPi/smartypi/web/ 
SmartyPi/smartypi/web/__init__.py 
SmartyPi/smartypi/web/k8055.py 
SmartyPi/smartypi/web/root.py 
SmartyPi/smartypi/web/schedule.py 

在「SmartyPi/smartypi.py」我已經初始化我的k8055對象的實例有:

from pyk8055 import k8055 
k = k8055(0) 

我希望能夠訪問相同的從喜歡的地方「K」的立場:

SmartyPi/smartypi/web/k8055.py 
SmartyPi/smartypi/web/schedule.py 

我似乎無法弄清楚我自己......

是「SmartyPi/smartypi.py」不創造最好的地方我K8055實例?

我應該把它放在別的什麼地方,我該如何讓這項工作按照我的需要進行?

+0

爲什麼不在'smartypi.py'中創建'k8055'實例,然後'k8055.py'和'schedule.py'包含除'k8055'實例之外的函數,所以您可以通過' k'這些功能? – 2013-05-03 02:02:18

+0

傳遞'k'實例作爲參數有點棘手,因爲'http:// localhost/k8055'或'http:/ http:// localhost/k8055'是從CherryPy內部調用'k8055.py'和'schedule.py'/localhost/schedule'由用戶創建。有沒有一種方法可以在我的應用程序中「導入」一個包含/使這些實例可用的公共模塊? – flexage 2013-05-03 02:10:48

回答

0

將k = k8055(0)添加到pyk8055模塊(最後)。一個比所有其它模塊只需更換:

from pyk8055 import k8055 

from pyk8055 import k 

注:我建議的東西更獨特的重命名ķ。

如果您不能編輯puk8055模塊,創建你自己的,把它叫做即globals.py:

from pyk8055 import k8055 
k = k8055(0) 

後,在其他模塊而不是直接進口pyk8055,只需要導入您的模塊globals.py:

from globals import k 
+0

感謝您的回答,我無法訪問pyk8055模塊的源代碼因此,我已經遵循了第二個選項「globals.py」。 不幸的是,雖然整潔,這似乎並沒有攻擊我的直接問題... 每當我第二次運行我的函數時,我的對象的最初打算的「全局」實例將丟失,並替換爲打斷連接的新實例... 我已將pastebin'd「smartypi/web/k8055 .py「源代碼在這裏 - > http://pastebin.com/qSXHVTss - 任何想法? – flexage 2013-05-08 20:12:54

+0

「from smartypi.appglobals import globalK8055 as k」must be outside of function。通過這種方式,k被添加到模塊名稱空間,並可供模塊內的所有功能訪問。目前,每當你開始你的功能時,appglobals會被重新導入,並在功能完成後被刪除。 – Marek 2013-05-09 00:33:28

相關問題