Python实现JavaBeans流程详解
作者:牛油菠蘿包 发布时间:2021-05-29 05:37:39
标签:Python,JavaBeans
在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


猜你喜欢
- //activity的xml<?xml version="1.0" encoding="utf-8&qu
- 1.springboot使用log4j2springboot使用的common-logging,底层兼容各种日志框架如,log4j2,slf
- 第一步:项目中资源配置文件夹(resources文件夹)下先新增测试环境application-dev.yml和application-pr
- 本文实例为大家分享了SpringBoot使用POI进行Excel下载的具体代码,供大家参考,具体内容如下使用poi处理Excel特别方便,此
- Mybatis-plus官网地址:https://baomidou.com/配置mysql在配置文件连接mysqlspring.dataso
- java怎么判断三位数先定义个测试数字,如图然后可以把数字转换成字符串来判断它的长度是否为3,如图获取判断数字范围是否在100到1000之间
- 没有结果时,去.First()时,会报错,所以一定要先.Count()判断一下而用FirstOrDefault(),如果集合中没有数据,则返
- 本文是vhr系列的第十二篇,项目地址 https://github.com/lenve/vhr邮件发送也是一个老生常谈的问题了,代码虽然简单
- 前言本篇文章将教你作为一个.NET程序员如何快入门Spring Boot。你不需要用Eclipse,也不需要用IDEA。已经习惯了VS,其他
- 1、多态性多态性是面向对象的最后一个特征,它本身主要分为两个方面: 方法的多态性:重载与覆写1、重载:同一个方法名称,根据参数类型以及个数完
- 第9版《Java核心技术卷Ⅰ》的第607页介绍了一个方法:Collections类中的sort方法可以对实现了List接口的集合进行排序。这
- 当项目越来越大的时候,依赖的库也越来越多,再加上aar的传递依赖,导致dependency的急速膨胀。我们可以通过如下几种方式,查看项目依赖
- Java 实现网络爬虫框架最近在做一个搜索相关的项目,需要爬取网络上的一些链接存储到索引库中,虽然有很多开源的强大的爬虫框架,但本着学习的态
- 前言本篇技术实现主要是运行是代理,不涉及到插桩技术,不引入插件,对业务影响点最小技术难点1. 如何拦截到所有的view的点击事件view有个
- 新建类Product:class Product{ public string name; &
- 前言在我们的日常企业应用开发当中,会碰到很多的图片素材访问的场景。比如社交类应用,您会在朋友圈中存放大量的图片,还有一些在线旅游或者直播的行
- 这篇文章主要介绍了springboot跨域CORS处理代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 这次记录的是实现Android图片用手拖拉的功能,,供大家参考,具体内容如下编译环境:eclipseAndroid版本4.0创建工程过程略实
- 1.UUID 简介UUID 含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准。也
- 本文实例讲述了C#获取进程或线程相关信息的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.