2

ConfigParserを使用して構成ファイルを読み取るPythonクラスがあります。

構成ファイル:

[geography]
Xmin=6.6
Xmax=18.6
Ymin=36.6
YMax=47.1

Pythonコード:

class Slicer:
    def __init__(self, config_file_name):
        config = ConfigParser.ConfigParser()
        config.read(config_file_name)
        # Rad the lines from the file
        self.x_min = config.getfloat('geography', 'xmin')
        self.x_max = config.getfloat('geography', 'xmax')
        self.y_min = config.getfloat('geography', 'ymin')
        self.y_max = config.getfloat('geography', 'ymax')

self.item最後の4行は繰り返しであり、セクション内の各項目の変数を作成する1つのPythonic行に何らかの形で圧縮する必要があると思います。

何か案は?

アダム

アップデート:

あなたの答えに従って、私は私のコードを次のように変更しました:

    for item in config.items('geography'):
        setattr(self, '_'+item[0], float(item[1]))

今、

   print self.__dict__
   >>> {'_xmax': 18.600000000000001, '_ymax': 47.100000000000001, 
        '_ymin': 36.600000000000001, '_xmin': 6.5999999999999996}
4

3 に答える 3

5

私は通常、コンストラクターでの外部相互作用を避けようとします-コードのテストを難しくします。ファイル名の代わりに、configパーサーインスタンスまたはfpのようなオブジェクトを渡す方がよいでしょう。

于 2010-04-11T09:38:34.840 に答える
3
for line in ['x_min', 'x_max', 'y_min', 'y_max']:

   setattr(self, line, config.getfloat('geography', line.replace('_', '')))
于 2010-04-11T09:38:38.000 に答える
1

次のようなものはどうですか?

['xmin'、'xmax'、'ymin'、'ymax']のキーの場合:
    self .__ dict __ [key] = config.getfloat('geography'、key);

上記では、self.x_minではなくself.xminに割り当てられることに注意してください...ただし、その名前付けに問題がなければ、これは機能するはずです...そうでない場合、名前間のマッピングは元のコードよりも多くなります。

于 2010-04-11T09:37:54.280 に答える