2016-04-14 21 views
-1

我有diificulty導入一個模塊,我創建了包。軟件包,模塊和功能的問題

這裏是我的代碼:

import test.addition._addition 
import test.subtraction._subtraction 
import test.multiplication._multiplication 


class calcul: 


    def addition(self, a, b): 

     self.c = _addition(a,b) 
     print self.c 

    def subtraction (self, a,b): 

     self.c = _subtraction(a, b) 
     print self.c 

    def multiplication (self, a, b): 

     self.c =_multiplication (a, b) 
     print self.c 

當你從第3行代碼的發現, 我已經存儲在模塊_addition一個文件夾,名爲除了我再次存儲在另外的文件夾中文件夾稱爲測試。 減法和乘法是相同的。 在每個文件夾中,我創建了一個模塊__init__以確保它被聲明爲包。

會更加清晰,下面是模塊中的代碼_addition

def _sous_addition(a,b): 
    return float(a) + float(b) 

的問題是,蟒蛇跟我說:

「_addition」沒有定義

全局命名

+1

因爲它是'test.addition._addition'。您可以用'import .. as ..'或'from .. import ..'將它別名爲'_addition'。 – deceze

+0

不好意思,你是什麼意思,「別把它添加進去......加入?」 – maximus

+0

他的意思是你應該像導入test.addition._addition那樣導入它作爲_addition – lapinkoira

回答

1

在編寫import test.addition._addition時,在本地範圍內可用的名稱是test,您可以使用test.addition._addition訪問_addition函數。你需要使用它的全名。

如果你想用的名字_addition導入功能到本地範圍,你需要寫任何的這些東西:

from test.addition import _addition 
import test.addition._addition as _addition 
+0

我仍然有問題。現在python告訴我模塊不可調用。 – maximus

+0

仍然非常*相同*的問題...?還是新的東西? – deceze

+0

閱讀您的擴展和調試我的代碼後,我認爲我更瞭解您的解釋。謝謝 – maximus

1

您應該使用test.addition._addition._addition調用該函數。

更爲重要的是:

嚴禁使用相同的名稱模塊和函數!

這真的是非常糟糕的編碼風格,遲早會咬你。看來欺騙是由這個困惑。請避免它。

+0

感謝您的建議。我在編碼方面仍然很新穎。我想現在只是調用模塊而不是函數,因爲我打算在模塊中添加更多的函數。 – maximus

+0

@maximus無論你是否調用函數,只是不要使用相同的名稱。命名可能是編程中最困難的部分,當你編寫更多代碼時,你會學到這一點。 – laike9m