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篇):根据谓词函数和属性字符串构造判断函数
创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段