python反射技术使用(动态变量名)

需求:需要通过动态变量名,取得对应的值。

例如,定义有如下类(也许是自己设计的表结构不合理),时不时需要获取或设置变量 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)     ## 设置对应的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值