Python实现JavaBeans流程详解
作者:牛油菠蘿包 时间:2021-05-29 05:37:39
在JavaBeans中有这样的一个描述:当一些信息需要使用类似于字典嵌套字典再嵌套列表这种很深的结构来储存的时候,请改用类来储存。实际上,这样的思想也可以用于Python中。
场景
在Python中,以前可能会这样写嵌套字典结构
school_list = [{
'school_name': 'SZ',
'class_id': '001',
'stu_num': 45,
'student':{
'stu_id': '001',
'stu_name': 'xiaohong',
'stu_score': 90
}
},
{
'school_name': 'Fxxking U',
'class_id': '002',
'stu_num': 40,
'student':{
'stu_id': '002',
'stu_name': 'xiaobai',
'stu_score': 98
}
}]
而当我们要访问比较深层结构中的数据时可能要这样:
print(school_list[0]['student']['stu_id'])
这样在取用时未免太麻烦,而且一旦嵌套结构越深层,取用时就越麻烦。
JavaBeans in Python
如果借鉴JavaBeans的思维,将此用类实现,会是以下这样:
# School.py
class School(object):
def __init__(self,school_name='',class_id='',stu_num=0,student=None) -> None:
self._school_name = school_name
self._class_id = class_id
self._stu_num = stu_num
self._student = student
@property
def school_name(self):
return self._school_name
@school_name.setter
def school_name(self,new_name):
self._school_name = new_name
@property
def class_id(self):
return self._class_id
@class_id.setter
def class_id(self,new_id):
self._class_id = new_id
@property
def stu_num(self):
return self._stu_num
@stu_num.setter
def stu_num(self,new_num):
self._stu_num = new_num
@property
def student(self):
return self._student
@student.setter
def student(self,new_student):
self._student = new_student
# Student.py
class Student(object):
def __init__(self,stu_id='',stu_name='',stu_score=0) -> None:
self._stu_id = stu_id
self._stu_name = stu_name
self._stu_score = stu_score
@property
def stu_id(self):
return self._stu_id
@stu_id.setter
def stu_id(self,new_id):
self._stu_id = new_id
@property
def stu_name(self):
return self._stu_name
@stu_name.setter
def stu_name(self,new_name):
self._stu_name = new_name
@property
def stu_score(self):
return self._stu_score
@stu_score.setter
def stu_score(self,new_score):
self._stu_score = new_score
我们将原有的嵌套字典数据转换为两个类实现,且分别在School.py与Student.py两个文件中,在类中我们对原本的数据以装饰器粉饰为属性从而使其可以进行读取与修改。这样一来,我们就可以用类属性的方式去访问我们想要的数据。
程序代码:
from School import School
from Student import Student
student_007 = Student(stu_id='007',stu_name='零零漆',stu_score=99)
school_Princeton = School(school_name='Princeton U',class_id='005',stu_num=1000,student=student_007)
student_qnc = Student(stu_id='250',stu_name='千年虫',stu_score=60)
school_Fuxxking = School(school_name='Fuxxking U',class_id='009',stu_num=500,student=student_qnc)
school_list = [school_Princeton,school_Fuxxking]
for i in school_list:
print(i.school_name)
print(i.class_id)
print(i.stu_num)
stu = i.student
print(stu.stu_name)
输出结果:
Princeton U
005
1000
零零漆
Fuxxking U
009
500
千年虫
总结:将深层次的嵌套结果转换为用类实现的好处是,在初始化类对象后,可以直接使用实例.属性的方式访问想要的数据,且关键数据在类中定义的很详细。
来源:https://blog.csdn.net/weixin_38813807/article/details/128675027
标签:Python,JavaBeans
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Struts2学习教程之拦截器机制与自定义拦截器
2021-10-27 13:02:56
WPF实现倒计时转场动画效果
2023-01-10 11:46:23
![](https://img.aspxhome.com/file/2023/9/119469_0s.png)
举例解析Java的图像缓冲技术的使用
2022-09-08 17:17:17
Android自定义dialog简单实现方法
2021-07-29 17:10:00
Java实现导出ZIP压缩包的方法
2023-05-06 04:58:57
3种C# 加载Word的方法
2021-06-05 21:06:41
![](https://img.aspxhome.com/file/2023/2/84482_0s.png)
浅谈springboot的三种启动方式
2022-07-31 10:57:47
![](https://img.aspxhome.com/file/2023/5/67965_0s.png)
springCloud项目搭建流程步骤分解
2023-04-24 23:48:43
![](https://img.aspxhome.com/file/2023/5/82455_0s.png)
struts2拦截器_动力节点Java学院整理
2023-06-11 10:11:36
![](https://img.aspxhome.com/file/2023/2/78242_0s.png)
C语言连续生成多个随机数实现可限制范围
2023-08-24 08:35:06
![](https://img.aspxhome.com/file/2023/3/127553_0s.png)
Spring整合Junit的使用详解
2022-11-20 18:33:17
Spring自定义注解配置简单日志示例
2023-01-25 09:31:08
Java设计模式编程之解释器模式的简单讲解
2022-01-24 16:03:32
![](https://img.aspxhome.com/file/2023/4/68544_0s.jpg)
详解@ConfigurationProperties实现原理与实战
2023-11-24 05:19:26
![](https://img.aspxhome.com/file/2023/7/58997_0s.png)
C#实现自定义Dictionary类实例
2022-12-19 09:23:47
![](https://img.aspxhome.com/file/2023/7/116457_0s.png)
C#对XML文件的各种操作实现方法
2023-01-21 06:14:40
Java中如何避免sql注入实例详解
2022-08-24 14:42:06
android使用ExpandableListView控件实现小说目录效果的例子
2023-04-14 22:10:27
Java基础详解之内存泄漏
2022-04-14 03:45:46
探讨Java验证码制作(下篇)
2023-04-04 11:21:42
![](https://img.aspxhome.com/file/2023/6/69946_0s.png)