python反射テクノロジー使用(動的変数名)
4700 ワード
需要:動的変数名で対応する値を取得する必要があります.
たとえば、次のようなクラスを定義します(自分で設計したテーブル構造が不合理かもしれません)、変数env_*変数の値を取得または設定してデータベースを更新する必要がある場合があります.そのため、変数名の変数を使用する必要があります.判断文を書く必要があります.
python独自のgetattr()、setattr()メソッドの使用
たとえば、次のようなクラスを定義します(自分で設計したテーブル構造が不合理かもしれません)、変数env_*変数の値を取得または設定してデータベースを更新する必要がある場合があります.そのため、変数名の変数を使用する必要があります.判断文を書く必要があります.
# model
class Order(models.Model):
current_env = models.IntegerField(default=0) # 0: ,1-5: /
env_1 = models.IntegerField(default=0) # ,0: ,1: ,2:
env_2 = models.IntegerField(default=0)
env_3 = models.IntegerField(default=0)
env_4 = models.IntegerField(default=0)
env_5 = models.IntegerField(default=0)
python独自のgetattr()、setattr()メソッドの使用
#
orders = Order.objects.all().exclude(env_1=0, env_2=0, env_3=0, env_4=0, env_5=0)
for order in orders:
env_id = order.current_env
env_name = Environment.objects.filter(env_id=env_id)[0].env_name
# , ,
arg_name = "env_" + str(env_id)
arg_name_value = getattr(order, arg_name) ##
## setattr(order, arg_name, 2) ##