Python学习之面向函数转面向对象详解
还记得前文函数章节的‘函数的定义与使用’章节么?今天我们就来针对 类 进行一个综合练习,利用所学的面向对象编程、类 的知识将我们之前做的面向函数编写的学生信息库重构为面向对象的方式。
所谓重构就是对代码设计和结构进行重新修改和开发,上一次我们都是通过函数来开发的,其实他们都是为了一个大目标开发出来的。就是学生目标管理,所以目标都相同,可以放在一个类中开发。
我们今天有两个目的,第一就是将之前面向函数开发的学生信息库功能转变为面向对象开发的学生信息库功能;第二就是要实现批量的增删改查及模糊查找的功能。
代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | # coding:utf-8 """ @Author:Neo @Date:2020/1/15 @Filename:students_info.py @Software:Pycharm """ class StudentInfo( object ): def __init__( self , students): self .students = students def get_by_id( self , student_id): return self .students.get(student_id) def get_all_students( self ): for id_, value in self .students.items(): print ( '学号:{}, 姓名:{}, 年龄:{}, 性别:{}, 班级:{}' . format ( id_, value[ 'name' ], value[ 'age' ], value[ 'sex' ], value[ 'class_number' ] )) return self .students def add( self , * * student): check = self .check_user_info( * * student) if check ! = True : print (check) return self .__add( * * student) def adds( self , new_students): for student in new_students: check = self .check_user_info( * * student) if check ! = True : print (check, student.get( 'name' )) continue self .__add( * * student) def __add( self , * * student): new_id = max ( self .students) + 1 self .students[new_id] = student def delete( self , student_id): if student_id not in self .students: print ( '{} 并不存在' . format (student_id)) else : user_info = self .students.pop(student_id) print ( '学号是{}, {}同学的信息已经被删除了' . format (student_id, user_info[ 'name' ])) def deletes( self , ids): for id_ in ids: if id_ not in self .students: print (f '{id_} 不存在学生库中' ) continue student_info = self .students.pop(id_) print (f '学号{id_} 学生{student_info["name"]} 已被移除' ) def update( self , student_id, * * kwargs): if student_id not in self .students: print ( '并不存在这个学号:{}' . format (student_id)) check = self .check_user_info( * * kwargs) if check ! = True : print (check) return self .students[student_id] = kwargs print ( '同学信息更新完毕' ) def updates( self , update_students): for student in update_students: id_ = list (student.keys())[ 0 ] if id_ not in self .students: print (f '学号{id_} 不存在' ) continue user_info = student[id_] check = self .check_user_info( * * user_info) if check ! = True : print (check) continue self .students[id_] = user_info print ( '所有用户信息更新完成' ) def search_users( self , * * kwargs): values = list ( self .students.values()) key = None value = None result = [] if 'name' in kwargs: key = 'name' value = kwargs[key] elif 'sex' in kwargs: key = 'sex' value = kwargs[ 'sex' ] elif 'class_number' in kwargs: key = 'class_number' value = kwargs[key] elif 'age' in kwargs: key = 'age' value = kwargs[key] else : print ( '没有发现搜索的关键字' ) return for user in values: # [{name, sex, age, class_number}, {}] if value in user[key]: result.append(user) return result def check_user_info( self , * * kwargs): if 'name' not in kwargs: return '没有发现学生姓名' if 'age' not in kwargs: return '缺少学生年龄' if 'sex' not in kwargs: return '缺少学生性别' if 'class_number' not in kwargs: return '缺少学生班级' return True students = { 1 : { 'name' : 'Neo' , 'age' : 18 , 'class_number' : 'A' , 'sex' : 'boy' }, 2 : { 'name' : 'Jack' , 'age' : 16 , 'class_number' : 'B' , 'sex' : 'boy' }, 3 : { 'name' : 'Lily' , 'age' : 18 , 'class_number' : 'A' , 'sex' : 'girl' }, 4 : { 'name' : 'Adem' , 'age' : 18 , 'class_number' : 'C' , 'sex' : 'boy' }, 5 : { 'name' : 'HanMeiMei' , 'age' : 18 , 'class_number' : 'B' , 'sex' : 'girl' } } if __name__ = = '__main__' : student_info = StudentInfo(students) user = student_info.get_by_id( 1 ) student_info.add(name = 'Marry' , age = 16 , class_number = 'A' , sex = 'girl' ) users = [ { 'name' : 'Atom' , 'age' : 17 , 'class_number' : 'B' , 'sex' : 'boy' }, { 'name' : 'Lucy' , 'age' : 18 , 'class_number' : 'C' , 'sex' : 'girl' } ] student_info.adds(users) student_info.get_all_students() print ( '------------------------------------------------------' ) # >>> 执行结果如下: # >>> 学号:1, 姓名:Neo, 年龄:18, 性别:boy, 班级:A # >>> 学号:2, 姓名:Jack, 年龄:16, 性别:boy, 班级:B # >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A # >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C # >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B # >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A # >>> 学号:7, 姓名:Atom, 年龄:17, 性别:boy, 班级:B # >>> 学号:8, 姓名:Lucy, 年龄:18, 性别:girl, 班级:C # >>> ------------------------------------------------------ student_info.deletes([ 7 , 8 ]) student_info.get_all_students() print ( '------------------------------------------------------' ) # >>> 执行结果如下: # >>> ------------------------------------------------------ # >>> 学号7 学生Atom 已被移除 # >>> 学号8 学生Lucy 已被移除 # >>> 学号:1, 姓名:Neo, 年龄:18, 性别:boy, 班级:A # >>> 学号:2, 姓名:Jack, 年龄:16, 性别:boy, 班级:B # >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A # >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C # >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B # >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A # >>> ------------------------------------------------------ student_info.updates([ { 1 : { 'name' : 'Jone' , 'age' : 18 , 'class_number' : 'A' , 'sex' : 'boy' }}, { 2 : { 'name' : 'Nike' , 'age' : 18 , 'class_number' : 'A' , 'sex' : 'boy' }} ]) student_info.get_all_students() print ( '------------------------------------------------------' ) # >>> 执行结果如下: # >>> ------------------------------------------------------ # >>> 所有用户信息更新完成 # >>> 学号:1, 姓名:Jone, 年龄:18, 性别:boy, 班级:A # >>> 学号:2, 姓名:Nike, 年龄:18, 性别:boy, 班级:A # >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A # >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C # >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B # >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A # >>> ------------------------------------------------------ result = student_info.search_users(name = 'd' ) print (result) print ( '------------------------------------------------------' ) # >>> 执行结果如下: # >>> [{'name': 'Adem', 'age': 18, 'class_number': 'C', 'sex': 'boy'}] result = student_info.search_users(name = '小' ) print (result) print ( '------------------------------------------------------' ) # >>> 执行结果如下: # >>> ------------------------------------------------------ # >>> [] # >>> ------------------------------------------------------ result = student_info.search_users(name = '') print (result) result = student_info.search_users(name = '小' ) print (result) print ( '------------------------------------------------------' ) # >>> 执行结果如下: # >>> ------------------------------------------------------[{'name': 'Jone', 'age': 18, 'class_number': 'A', 'sex': 'boy'}, {'name': 'Nike', 'age': 18, 'class_number': 'A', 'sex': 'boy'}, {'name': 'Lily', 'age': 18, 'class_number': 'A', 'sex': 'girl'}, {'name': 'Adem', 'age': 18, 'class_number': 'C', 'sex': 'boy'}, {'name': 'HanMeiMei', 'age': 18, 'class_number': 'B', 'sex': 'girl'}, {'name': 'Marry', 'age': 16, 'class_number': 'A', 'sex': 'girl'}] # >>> [] result = student_info.search_users(name = '') print (result) |
到此这篇关于Python学习之面向函数转面向对象详解的文章就介绍到这了,更多相关Python 面向函数 面向对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
这篇文章主要介绍了Python Scrapy框架:通用爬虫之CrawlSpider用法,结合实例形式分析了Scrapy框架中CrawlSpider的基本使用方法,需要的朋友可以参考下2020-04-04服务器端jupyter notebook映射到本地浏览器的操作
这篇文章主要介绍了服务器端jupyter notebook映射到本地浏览器的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-04-04Python的Tornado框架的异步任务与AsyncHTTPClient
Tornado的奥义就在于异步处理来提高单线程的Python程序执行性能,这里我们就来详解Python的Tornado框架的异步任务与AsyncHTTPClient,需要的朋友可以参考下2016-06-06正确理解Python中if __name__ == ''__main__''
今天小编就为大家分享一篇关于正确理解Python中if __name__ == '__main__' ,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01
最新评论