4

多変量データ構造として使用する Python クラスをいくつか作成しました。これらはさまざまなタスクに使用されます。場合によっては、クラスにさまざまな値セットを設定したいことがあります。デフォルトのパラメータ ファイル名「ho2.defaults」は次のようになります。

name = 'ho2'
mass_option = 'h1o16'
permutation = 'odd'
parity = 'odd'
j_total = 10
lr = 40
br = 60
jmax = 60
mass_lr = 14578.471659
mass_br = 1781.041591
length_lr = ( 1.0, 11.0, 2.65 )
length_br = ( 0.0, 11.0, 2.46 )
use_spline = True
energy_units = 'au'
pes_zpe = -7.407998138300982E-2
pes_cutoff = 0.293994

現在、ファイルから目的のキーと値のペアを読み取って辞書を作成していますが、これらの辞書キーをクラスインスタンス変数名にする「pythonic」方法が必要です。

# Instantiate Molecule Class
molecule = Molecule()

# Create Dictionary of default values
default_dict = read_dict_from_file(filename)

# Set populate class instance variables with dictionary values
for key,value in default_dict:
    molecule.key = value

したがって、クラスのインスタンス変数「molecule.name」は、辞書のキーと値のペアで設定できます。手でこれを行うこともできますが、ループするより良い方法があると確信しています。実際には、ディクショナリは大きくなる可能性があり、入力する値をユーザーが選択できるようにしたいので、ディクショナリが変更される可能性があります。ここで何が欠けていますか?

4

3 に答える 3

4

setattrを使用します:setattr(molecule, key, value)

于 2015-11-09T18:00:17.857 に答える
4

簡単な方法は次のとおりです。

vars(molecule).update(default_dict)

ただし、これは既存の属性を壊します。より繊細なアプローチについては、次を試してください。

for name, value in default_dict.items():
    if not hasattr(molecule, name):
        setattr(molecule, name value)
于 2015-11-09T18:02:15.360 に答える