Python 实体类数据结构极简教程
·
- 解决Python实体类数据结构创建问题
- 支持实体类转dict
- 支持带默认创建时间和更新时间
- 支持属性get、set赋值
- 支持初始化覆盖写
import json
import arrow
"""数据结构基类"""
class Base(object):
def __init__(self, *args):
pass
def to_dict(self):
obj = json.loads(self.to_string())
return self.rename_dict(obj)
def to_string(self):
return json.dumps(self, default=lambda o: o.__dict__)
# 仅支持二级字典嵌套
def rename_dict(self, obj):
result_dict = dict()
for k, v in obj.items():
if isinstance(v, dict):
result_dict.update({k: {str(sub_k).split('__')[-1]: sub_v for sub_k, sub_v in v.items()}})
else:
result_dict.update({str(k).split('__')[-1]: v})
return result_dict
# 默认包含创建时间和更新时间
class BaseInfo(Base):
def __init__(self, *args):
self.__create_time = arrow.now().format('YYYY-MM-DD HH:mm:ss') # 创建时间
if args and isinstance(args[0], dict):
for k, v in args[0].items():
if hasattr(self, k): # 检查实例是否有这个属性
setattr(self, k, v) # same as: a.name = 'tiger'
self.__update_time = arrow.now().format('YYYY-MM-DD HH:mm:ss') # 更新时间
@property
def create_time(self):
return self.__create_time
@create_time.setter
def create_time(self, value):
if value:
self.__create_time = value
@property
def update_time(self):
return self.__update_time
@update_time.setter
def update_time(self, value):
if value:
self.__update_time = value
# 用户信息实体类
class UserInfo(Base):
def __init__(self, *args):
self.id = 100 # 用户ID
self.__sex = "男" # 性别 set
super().__init__(*args)
@property
def sex(self):
return self.__sex
@sex.setter
def sex(self, value):
if value:
self.__sex = value
# 用户信息默认带时间实体类继承BaseInfo
class UserTimeInfo(BaseInfo):
def __init__(self, *args):
self.id = 100 # 用户ID
self.__sex = "男" # 性别 set
super().__init__(*args)
@property
def sex(self):
return self.__sex
@sex.setter
def sex(self, value):
if value:
self.__sex = value
if __name__ == '__main__':
user_info = UserInfo()
print(f'sex修改前:{user_info.sex}')
user_info.sex = "女" # 修改为女
print(f'sex修改后:{user_info.sex}')
print(f'实体类转dict:{user_info.to_dict()}')
print(f'-----------------------------')
t_info = UserTimeInfo()
print(f'sex修改前:{t_info.sex}')
t_info.sex = "女" # 修改为女
print(f'sex修改后:{t_info.sex}')
print(f'带默认时间实体类转dict:{t_info.to_dict()}')
#sex修改前:男
#sex修改后:女
#实体类转dict:{'id': 100, 'sex': '女'}
#-----------------------------
#sex修改前:男
#sex修改后:女
#带默认时间实体类转dict:{'id': 100, 'sex': '女', 'create_time': '2020-11-07 14:42:15', 'update_time': '2020-11-07 14:42:15'}
pip install arrow
更多推荐

所有评论(0)