python反射テクノロジー使用(動的変数名)

4700 ワード

需要:動的変数名で対応する値を取得する必要があります.
たとえば、次のようなクラスを定義します(自分で設計したテーブル構造が不合理かもしれません)、変数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)     ##