2016-07-21 21 views
0

この質問はおそらく以前に聞かれましたが、スタックオーバーフローで見つかったその他の記事は主にグローバル変数の変更や関数のインポートなどでした。私がクイック検索をしたとき。Pythonで複数のモジュールで使用する変数を宣言する方法

私はPythonでコードを作成し始めています。私は、以下を行う最も効率的で適切な方法が何であるか不思議でした。

他のモジュールにインポートする親モジュールがあります。

# some import statements go here 

# Constants that need to be the same for all objects 
a = 1 
b = 2 
... 

# A class with some useful functions 
class Def(): 
    def __init__(self): 
    ... 

このモジュールを他のものにインポートして、Defクラスの関数を使用しています。しかし、私はまた、それをインポートするすべてのモジュールが、クラスの外で宣言した定数にアクセスできるようにしたい。

私はそれらの値をそのモジュールで呼び出した場所で使用することを望むので、それらを外部に宣言しました。私はオブジェクトにアタッチしたくないので(self.a、self.bなどとして参照する必要があります)、私が使用しているすべてのモジュール全体で定数になります。

私は検討していたオプションのいくつかは、次のとおりです。

  1. 私は

を別のクラスのグローバル変数としてこれらを宣言し、すべてのモジュールで輸入 そのクラス

  • 使用from parentmodule import *これらのいずれかがうまくいくかどうか、これを行うための標準的な方法があるかどうかはわかりません。変数の名前の競合は、定数の性質上、問題にはなりません。私のプログラムの文脈では、他の変数を表現するために使われることのない一意の名前を持つ物理定数です。

    ご質問があまりにも基本的/以前に尋ねられた場合はお詫び申し上げます。ご協力いただきありがとうございます。

  • 答えて

    1

    モジュール全体をインポートすることは一種の名前空間として機能し、それを行う最も簡単な方法に思えます。だから、 "mystuff.py" を持っている:

    a = 1 
    b = 2 
    
    def MyFunc(): 
        .... 
    
    あなたの他のモジュールで次に

    import mystuff 
    
    print mystuff.a 
    print mystuff.b 
    
    mystuff.MyFunc() 
    

    あなたのソリューションへ:

    from mystuff import * 
    

    動作しますが、おそらく競合と私は考えています人々が「ピジョンソニック」と考えるものではありません。

    +0

    変数がすべてのモジュールで共通であると言うことができるので、mystuff.a、mystuff.bなどの入力を続ける必要はありませんか? – GoK

    +1

    あなたはmystuff.aをaとしてインポートすることができます。変数をaとして呼び出すことができます。変数ごとに1行のコードが必要なので、あまりにも多くの変数を持たない限り動作します。 – Parzzival

    +1

    または、 'from mystuff import a'です。 –

    関連する問題