python string字符串转类属性

Posted Jason_WangYing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python string字符串转类属性相关的知识,希望对你有一定的参考价值。

最近在用django时发现有时需要通过字符串获取类属性的值,还有就是通过字符串设置类属性的值

内置函数:地址

>>>class A(object):
...     bar = 1
... 
>>> a = A()
>>> getattr(a, 'bar')          # 获取属性 bar 值
1
>>> setattr(a, 'bar', 5)       # 设置属性 bar 值
>>> a.bar
5

主要是我想通过dict来设置model属性的值

# model.py

# 公众号用户信息
class WechatFollowersInfo(models.Model):
    subscribe = models.IntegerField('用户状态', default=0, choices=((0, '未关注'), (1, '已关注')))
    openid = models.CharField('用户openid', max_length=100, default='')
    nickname = models.CharField('用户昵称', max_length=50, null=True,default='')
    sex = models.IntegerField('用户性别', default=0, choices=((0, '未知'), (1, '男性'), (2, '女性')))
    sex = models.CharField('用户昵称', max_length=50, null=True,default='')
    city = models.CharField('城市', max_length=30, null=True,default='')
    country = models.CharField('国家', max_length=30, null=True,default='')
    province = models.CharField('省份', max_length=30, null=True,default='')
    language = models.CharField('语音', max_length=30, null=True,default='')
    headimgurl = models.URLField('用户头像', max_length=500, null=True,default='')
    subscribe_time = models.CharField('用户关注时间',max_length=30, null=True,default='') # 为时间戳。如果用户曾多次关注,则取最后关注时间
    unionid = models.CharField('unionid', max_length=50, null=True,default='')
    remark = models.CharField('备注', max_length=50, null=True,default='')
    groupid = models.CharField('分组ID', max_length=30, null=True,default='')
    tagid_list = models.CharField('标签ID', max_length=100, null=True,default='')
    subscribe_scene = models.CharField('关注来源',choices=choices.ADD_SCENE_ORIGIN, max_length=30, null=True,default='')
    qr_scene = models.CharField('扫码场景', max_length=100, null=True,default='')
    qr_scene_str = models.CharField('扫码场景描述', max_length=100, null=True,default='')

    class Meta:
        verbose_name = '公众号用户信息'  # 后台显示名称
        verbose_name_plural = verbose_name  # 表示复数


user_info = weixin_models.WechatFollowersInfo()
# 获取userinfo的openid属性
getattr(user_info, 'openid')
# 设置属性的值
setattr(user_info, 'openid',55)




同时我根据这个原理写了个dict对应到model属性的方法,可以直接设置属性的值,然后再save

 

def model_to_list_display(need_model, add_items=[], subtract_items=[]):
    '''*******使用此方法时,传递的need_model类不用使用三个"""来做注释,否则会获取到的是注释不是属性********
        need_model,     这个是需要生成的类
        add_items,      这个是需要增加的list列表
        subtract_items, 这个是需要减少的list列表
    '''
    ''' 这个方法主要是想一步生成list_display里面的元素,不用再一步一步的去敲''' \\
        # 获取这个类的所有属性
    # print(need_model.__doc__)
    doc_str = need_model.__doc__
    content_str = doc_str.split('(', 1)[-1][:-1]
    content_list = content_str.split(', ')
    # 如果需要屏蔽不显示的字段,可以在list时操作
    for item in subtract_items:
        if item in content_list:
            content_list.remove(item)

    for item in add_items:
        content_list.append(item)

    # 返回值需要list转元组
    return tuple(content_list)

但是如果要用update_or_create方法的话,可以直接用字典来添加数据


user = client.user.get(openid)
logger_weixin.info(user)
print(type(user))
#user是dict    weixin_models.WechatFollowersInfo().objects.update_or_create(openid=openid,defaults=user)

以上是关于python string字符串转类属性的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百七十八回:旋转类视图动画)

Python代码阅读(第38篇):根据谓词函数和属性字符串构造判断函数

javascriptphp数组对象互转类

CSP核心代码片段记录

php数组与xml互转类

创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段