这一段日子没怎么更新,也没怎么看代码,一直在弄回国和机票的事,只要有时间还是会继续整理
前言
面向对象我早就想写了,好好总结一下,对自己也有帮助,也会对OOP更加熟悉。跟之前一样,还是基于对于Python之路的学习。放上链接
The link of tutorials:Day6
多说一句,我又找到了另外一个非常全面的学习博客,人家真是厉害啊。
链接:Python全栈开发之路
Ok!正文开始
关于面向对象(Object-oriented programming)
为什么看上去面向对象编程更复杂?但实际上越复杂的程序反而使用面向对象会使得整体看上去更富有逻辑性更有调理。当我们思考事情时,最简单的就是从上到下,一步一步来,而这种逻辑也是一种我们最常用的编程方式—面向过程。
面向过程
举个例子:输入->输出->打印。够简单直接吧,这就是面向过程。而我觉得面向过程最大的弊端就是牵一发而动全身。一旦你的代码需求不同了,我们可能就会发现整个代码都需要修改。很显然,面向过程可以编写复杂的程序,但是维护起来就很头疼了,有点一锤子买卖的意思。
面向对象
怎么理解类和对象呢?我觉得很好理解,具有共性的事物可以定义为一类,比如人,车,动物。但是具有共性的事物不一定都有相同的属性,人类有不同的性格,动物有不同的习性,车有不同的定位。 引用教程中的定义
一个类可以实例化多个对象,每个对象亦可以有不同的属性
面向对象的三大特性
封装(Encapsulation)
我们给定义好的类和对象赋予值,然后进行打包,从而隔离复杂度
1 | class People(object): |
继承(Inheritance)
可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展,类与类之间的关系,避免代码的重复
多态(Polymorphism)
允许将子类类型的指针赋值给父类类型的指针,不论对象如何改变,运用同一种形式接口调用
用一段code证明Python的多态性
1 | class Animal(): |
面向对象举例代码
通过下面的这个小程序,就可以了解到OOP的基本使用方法和OOP如何实现继承特性。
1 | class BankAccount(object): |
1 | def main(): |
练习代码(Code)
如何利用OOP实现学校信息管理
我认为想写好OOP的前提必须对整个要写的代码的结构有一个很好的了解,换句话说我们在写代码之前必须对整体关系有一个清晰的了解。先定义关系再构造框架。
用学校来讲,我们先从最简单的开始定义,也就是学员(Student)
1
2
3
4
5#姓名和年龄只是举例
class Student(object):
def __init__(self,s_name,s_age):
self.s_name=s_name
self.s_age=s_age下一个我需要定义学校有的课(Course)
1
2
3
4class Course(object):
def __init__(self,course_name,course_time):
self.course_name=course_name
self.course_time=course_time学生和课都有了,下一步我们需要定义班级。我们需要注意的是定义班级时,需要包含对应学生和课程(Class)
1
2
3
4
5class Class(object):
def __init__(self,class_name,linked_course):
self.class_name=class_name
self.linked_course=linked_course
self.class_students={}定义老师类(Teacher)
1
2
3
4
5
6
7
8class Teacher(object):
def __init__(self,t_name,t_age):
self.t_name=t_name
self.t_age=t_age
self.t_class={}
def teacher_add_class(self,class_name,linked_class):
self.t_class[class_name]=linked_class定义学校类,这一部分比较关键,所有操作的函数都在学校类中实现(School)
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
59class School(object):
def __init__(self,name,address):
self.name=name
self.address=address
self.school_course={}
self.school_class={}
self.school_teacher={}
self.school_student={}
def display_school(self):
print("The school's name:",self.name)
print("The school's address",self.address)
def create_course(self,course_name,course_time):
new_course=Course(course_name,course_time)
self.school_course[course_name]=new_course
def display_course(self):
for key in self.school_course:
course=self.school_course[key]
print("The course name:",course.course_name)
print("Time:",course.course_time)
def create_class(self,class_name,linked_course):
new_class=Class(class_name,linked_course)
self.school_class[class_name]=new_class
def display_class(self):
for key in self.school_class:
classes=self.school_class[key]
print("The class name:",classes.class_name)
print("Linked course:",classes.linked_course)
def create_teacher(self,t_name,t_age,class_name,linked_class):
new_teacher=Teacher(t_name,t_age)
new_teacher.teacher_add_class(class_name,linked_class)
self.school_teacher[t_name]=new_teacher
def display_teacher(self):
for key in self.school_teacher:
t=self.school_teacher[key]
class_list=[]
for i in t.t_class:
class_list.append(i)
print("Teacher's name: %s\tTeacher's age:%s\tClasses:%s\t" %(t.t_name,t.t_age,class_list))
def create_student(self,s_name,s_age,enrolled_class):
new_student=Student(s_name,s_age)
c_class=self.school_class[enrolled_class]
c_class.class_students[s_name]=new_student
def display_info(self,teacher_name):
teacher_info=self.school_teacher[teacher_name]
for i in teacher_info.t_class:
search_class=self.school_class[i]
s_list=[]
for m in search_class.class_students:
s_list.append(m)
print("Your class:",search_class.class_name)
print("Your course:",search_class.linked_course)
print("Your students:",s_list)添加实例
1
2
3
4
5
6
7
8
9
10
11school=School("ABC","Texas")
school.display_school()
school.create_course("python","monday")
school.display_course()
school.create_class("101","python")
school.display_class()
school.create_teacher("Hao","24","101","101")
school.display_teacher()
school.create_student("Haha","18","101")
school.create_student("Huhu","17","101")
school.display_info("Hao")Output
The school’s name: ABC
The school’s address Texas
The course name: python
Time: monday
The class name: 101
Linked course: python
Teacher’s name: Hao Teacher’s age:24 Classes:[‘101’]
Your class: 101
Your course: python
Your students: [‘Haha’, ‘Huhu’]
上面的代码是对OOP的一种关系的梳理和应用,网上也有很多完整的关于选课系统的代码。通过对比人代码的借鉴和自己的理解,我做的只是对OOP概念的强调和实现。
Reference