还记得前文函数章节的‘函数的定义与使用’章节么?今天我们就来针对 类 进行一个综合练习,利用所学的面向对象编程、类 的知识将我们之前做的面向函数编写的学生信息库重构为面向对象的方式。
所谓重构就是对代码设计和结构进行重新修改和开发,上一次我们都是通过函数来开发的,其实他们都是为了一个大目标开发出来的。就是学生目标管理,所以目标都相同,可以放在一个类中开发。
我们今天有两个目的,第一就是将之前面向函数开发的学生信息库功能转变为面向对象开发的学生信息库功能;第二就是要实现批量的增删改查及模糊查找的功能。
代码示例如下:
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 面向函数 面向对象内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_42250835/article/details/123451658