【原创】python 实体类

之前写过一篇:《Python 封装-实现 C#实体类》 

过程比较复杂,代码一堆一堆的的

 

今天呢,再补发一个实测可用哦~

1 # -*- coding:utf-8 -*-
 2
 3 # @version: 1.0
 4 # @author: ZhangZhipeng
 5 # @date: 2015-07-13
 6
 7 from collections import namedtuple
 8
 9
10 class Entity(object):
11
12     """docstring for Entity"""
13
14     def __init__(self, class_name, columns, **kwargs):
15         super(Entity, self).__init__()
16         _columns = [i.strip() for i in columns.split(" ") if i.strip()]
17         _columns.extend(kwargs.keys())
18         columns = list(set(_columns))
19         entity = namedtuple(class_name, columns)
20         self._entity = entity(**kwargs)
21
22     def __getattribute__(self, key):
23         entity = super(Entity, self).__getattribute__("_entity")
24         try:
25             return super(Entity, self).__getattribute__(key)
26         except:
27             return getattr(entity, key)
28
29     def __setattr__(self, key, value):
30         if key == "_entity":
31             super(Entity, self).__setattr__("_entity", value)
32             return
33         entity = super(Entity, self).__getattribute__("_entity")
34         try:
35             # setattr(entity, key, value)
36             entity.__setattr__(key, value)
37         except:
38             super(Entity, self).__setattr__(key, value)
39
40
41 if __name__ == '__main__':
42     user = {"name": "zhipeng", "age": 20}
43     entity = Entity("user", "", **user)
44     print entity
45     # print dir(entity)
46     print entity.name, entity.age
47     # print entity.score
48
49     entity.score = 200
50     print entity.score
51
52     entity.name = 'zhang'
53     print entity.name
54
55     entity.sex = "boy"
56     print "sex:", entity.sex
57

输出如下:

zhangzhipeng@Earth:test$ python entity.py

<__main__.Entity object at 0x7f863f08c050>

zhipeng 20

200

zhang

sex: boy

 

可以把这个当作基类来用,

 1 # -*- coding:utf-8 -*-
 2
 3 # @version: 1.0
 4 # @author: ZhangZhipeng
 5 # @date: 2015-07-13
 6
 7 from entity import Entity
 8
 9
10 class UserEntity(Entity):
11
12     """docstring for userEntity"""
13
14
15 if __name__ == '__main__':
16     user = {"name": "zhipeng", "age": 14}
17     user_entity = UserEntity("user", "", **user)
18     print user_entity
19     # print dir(user_entity)
20     print user_entity.name, user_entity.age
21     # print user_entity.score
22
23     user_entity.score = 200
24     print user_entity.score
25
26     user_entity.name = 'zhang'
27     print user_entity.name
28
29     user_entity.weibo = 'sina'
30     print user_entity.weibo
31

运行效果:

zhangzhipeng@Earth:test$ python user_entity.py

<__main__.UserEntity object at 0x7f8d38497950>

zhipeng 14

200

zhang

sina

 

参考《Convert Python dict to object?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值