4

Pythonスクリプトの先頭でプログラムの構成変数を宣言する標準的な方法は何ですか? これらは、プログラム全体で複数のクラスと関数で使用されます。最善の方法は次のとおりです。

  1. 構成オプションを使用して混合辞書を作成し、それらを必要とするすべてのクラスに渡します。欠点: これには追加の属性を渡す必要があります。例えば:

    config = {'parseTags': {'title','font','p'},    
        'name': 'steve',                
        'logFrequencies': 10,               
        'print_rate': False  
        }
    

     

    newCustomObject = CustomClass(config)
    customfunction(config)
    print 'hi',config['name']
    
  2. ファイルの先頭にグローバル変数を作成し、プログラム全体でそれらを呼び出します。欠点: クラスのカプセル化が台無しになります。

  3. 他の何か。

これを行う最もpythonicな方法は何ですか?

4

3 に答える 3

4

単一のファイル(モジュール)で使用される定数の場合、私は通常、グローバル変数を上部で宣言するだけです。これにより、意味のある方法でカプセル化が失われることはありません(すべてのクラスが継承する基本クラスにこれらの定数を配置するのと同じです)。

django構成システムは、共有定数を作成するための優れた方法を提供します。モジュールを作成すると、構成システムはそこから読み取り専用オブジェクトを作成し、モジュールのメンバーを公開します。

于 2012-06-26T14:44:22.973 に答える
4

ええと、オプション1とオプション2は、実際にはそれほど大きな違いではありません。オプション1のディクショナリはそれ自体がグローバルであり、ディクショナリの値はハードコーディングされています。

最もPython的なアプローチが何であるかはわかりませんが、構成を別の構成ファイルにプルし、Pythonの標準のConfigParserモジュールを使用して読み取ります。

于 2012-06-26T14:45:00.570 に答える
1

クラスが使用され、構成オプションがそのメンバー(インスタンスメンバーではない)としてアクセスされる場合に最も読みやすくなります。つまり、次のようになります。

class config:
    option = 3

# code code code
foo = config.opt

モジュールが大きくなった場合は、ファイルからモジュールに簡単に配置できますimport config from config

于 2012-06-26T14:46:19.710 に答える