種別[gsm] 2021-08-28T11:53:45Z
セクショングローバル共有メモ
日時2021-08-28T11:53:45Z
元URL(URLなし)

[仏教の最適化プログラムの続き。] ちょっとハマったこと。 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 をかける場所が、クラス定義の場所でなくなるので、わかりにくくなるが、これがもっとも穏当な方法だろうと思う。クラス定義の場所には、あとで変更する旨のコメントを残すぐらいはしておくべきだろう。