[仏教の最適化プログラムの続き。] ちょっとハマったこと。 Invasion…
jrf> [仏教の最適化プログラムの続き。]
ちょっとハマったこと。
Invasion クラスの damage_unit をオプション指定で増やせるようにしようとした。
単純に damage_unit = 30 のところを damage_unit = 30 * ARGS.invasion_mag などとするのは失敗する。
なぜなら、クラスを定義する前に ARGS は作られてないし、まして parse_args もされていないから。
いろいろ考えた末、今回のようにクラス変数を ARGS で変更したい場合は、parse_args のあと、update_classes という別の関数を呼び、その中で変更するようにした。例えば…
def update_classes ():
Invasion.damage_unit *= ARGS.invasion_mag
…などとする。
ARGS.invasion_mag をかける場所が、クラス定義の場所でなくなるので、わかりにくくなるが、これがもっとも穏当な方法だろうと思う。クラス定義の場所には、あとで変更する旨のコメントを残すぐらいはしておくべきだろう。