2016-04-14 8 views
-1

私はパッケージで作成したモジュールをインポートすることに失敗しています。ここパッケージ、モジュール、関数に関する問題

は私のコードです:

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 

あなたは私が加えというフォルダにモジュール_additionを保存したし、再び私は、Aに加えてフォルダを保存 、コードの最初の3行から気づいたようtestというフォルダ。 減算と乗算で同じです。 各フォルダには、パッケージとして宣言されていることを確認するために、モジュール__init__を作成しました。

は、以下のモジュール内のコードで、さらに明確になるために_addition

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

問題は、Pythonはその私に言ったことです:

「_addition」が定義されていません

グローバル名

+1

これは 'test.addition._addition'です。 'import .. as ..'や' from .. import ..'で '_addition'だけエイリアスすることができます。 – deceze

+0

すみません、どういう意味ですか、「エイリアスはそれだけで_additionとimport ... asas?」という意味ですか? – maximus

+0

彼はインポートのようにインポートする必要があることを意味するtest.addition._addition as _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

Expanlanationを読み、自分のコードをデバッグした後、私はあなたのexplanaitionをよく理解していると思います。ありがとうございました – maximus

1

あなたはその機能を呼び出すためにtest.addition._addition._additionを使用する必要があります。もっと重要なのは何

は次のとおりです。

は、モジュールおよび機能に同じ名前を使用することはありません!

これは本当に本当に悪いコーディングスタイルであり、遅かれ早かれあなたを噛んでいます。これは欺瞞が混乱しているようです。それを避けてください。

+0

あなたの助けをありがとう。私はまだコーディングに新しいです。モジュールにもう1つの機能を追加しようとしているので、私は今はモジュールを呼び出しています。 – maximus

+0

@maximus関数を呼び出すかどうかに関わらず、同じ名前を使用しないでください。ネーミングはおそらくプログラミングの最も難しい部分ですが、コードを書くにつれてそれを学びます。 – laike9m