飘逸的python - 灵活的动态之xxxattr

来源:互联网 发布:手机淘宝看实名认证 编辑:程序博客网 时间:2024/06/04 18:12
标题的xxxattr指的是hasattr/getattr/setattr/delattr。
可以动态的检测、获取、设置、删除对象的属性和方法。
这里所说的动态,说白了就是“可以通过字符串来做这些事”。
这是一个非常强大灵活的特性。
我举个例子。
有个GM工具来设置玩家角色的属性,比如角色的属性有经验、体力、游戏币。
roletable = {'31415926':{'exp':99,'energy':100,'gamecoin':1000}}#伪角色数据库表class Role:    def __init__(self,id):        roleinfo      = roletable[id]        self.exp      = roleinfo['exp']        self.energy   = roleinfo['energy']        self.gamecoin = roleinfo['gamecoin']role = Role('31415926')
从这个GM工具传入程序的参数是角色id(_id),属性名(_attr),属性值(_val)。
换句话说,就是传入的是字符串
如果按照常规做法。只能是枚举。
if _attr == 'exp':    role.exp = _valelif _attr == 'energy':    role.energy == _valelif _attr == 'gamecoin':   role.gamecoin == _val
而在python的动态下,
只需要
setattr(role,_attr,_val)
比如
setattr(role,'gamecoin',888)print role.gamecoin
输出
888

原创粉丝点击