面向对象编程与类的定义和函数的产生
一.面向对象编程
面向对象编程的核心是对象
1.在程序中:
函数:盛放数据的容器
对象:盛放数据和函数的容器
2.在现实生活中:
对象是特征与技能的结合体
3.优点是:
扩展性强,可维护性强
4.缺点是:
编程复杂度高
5.应用场景:
对扩展性要求较高的地方。比如说常用的微信。
1 def chose_course(student, course): 2 student['course'].append(course) 3 print('%s选课成功 %s' % (student['name'], student['course'])) 4 5 6 student1 = { 7 'name': 'jason', 8 'age': 18, 9 'gender': 'male', 10 'course': [], 11 'choose': chose_course 12 } 13 student2 = { 14 'name': 'jack', 15 'age': 18, 16 'gender': 'male', 17 'course': [], 18 'choose': chose_course 19 } 20 21 student1['choose'](student1, 'python') 22 student2['choose'](student2, 'java')
二.类的定义与产生
1.对象:
特征与技能的结合体
2.类:
一系列对象相似的特征和相似的技能的结合体
3.现有类还是现有对象?
在程序中必须定义类,然后调用类产生对象
1 ''' 2 语法格式: 3 1.定义函数: 4 def 函数名(): 5 pass 6 2.定义类: 7 class 类名(): 8 pass 9 ''' 10 # 定义类: 11 ''' 12 发生了什么事? 13 1. 立即执行类体代码 14 2. 产生一个类的名称空间,把类体里面执行的名字都扔到名称空间中(大字典) 15 3. 把类的名称空间绑定给__dict__, 类名.__dict__ 16 ''' 17 18 class Student(): 19 school = 'SH' 20 21 def choose_corse(student, course): 22 student['course'].append(course) 23 print('学生%s选课成功 %s' % student, student['course']) 24 25 26 '''调用类产生了对象,默认情况下是一个空字典''' 27 stu1 = Student() 28 stu2 = Student() 29 '产生一个空字典' 30 print(stu1.__dict__) 31 '产生一个空字典' 32 print(stu2.__dict__) 33 print(Student.__dict__)
三.给对象定制自己独有的属性
1 '给对象定制自己独有的属性' 2 3 class Student(): 4 school = 'SH' 5 6 def __init__(student, name, age, gender, course): 7 student.name = name 8 student.age = age 9 student.gender = gender 10 student.course = course 11 12 def choose_course(student, course): 13 student['course'].append(course) 14 print('%s选课成功 %s' % (student['name'], student['course'])) 15 ''' 16 1. 得到一个空对象 17 2. 调用了Student.__dict__(空对象,'ly', 18, 'male'), 18 3. 得到一个初始化的结果。 19 ''' 20 student1 = Student('lw', 18, 'male', 'python') 21 print(student1.__dict__) 22 '属性的查找:先从自己的对象中查找,然后在去产生对象的类中查找' 23 24 25 Student.school = 'aaaa' 26 print(Student.school)
四.属性的查找
1 # 版本3: 2 class Student(): 3 # 定义一个属性 4 school = 'SH' 5 6 def __init__(self, name, age, gender, course=None): 7 if course is None: 8 course = [] 9 self.name = name # stu1.__dict__['name'] = 'jason' 10 self.age = age # stu1.__dict__['age'] = 18 11 self.gender = gender # stu1.__dict__['gender'] = 'male' 12 self.course = course 13 def choose_course(self, course): 14 # stu_dict => stu 15 self.course.append(course) 16 print('%s选课成功 %s' % (self.name, self.course)) 17 18 def func(self, name, age): 19 pass 20 21 # 属性的查找: 22 # 1. 类属性: 在类中写的属性就称为类属性 23 # 2. 对象属性:在对象自己的名称空间中的属性就是对象属性 24 25 # 类属性的查找 26 # 1. 查 27 print(Student.school) 28 29 # 2. 增加 30 Student.country = 'China' 31 32 # 3. 改 33 Student.school = 'BJ' 34 35 # 4. 删除 36 del Student.school 37 print(Student.__dict__) 38 # {} 39 stu = Student('ly', 18, 'male') # 实例化对象, stu就是一个实例 40 # 对象属性 41 # 1. 查 42 print(stu.name) 43 print(stu.age) 44 print(stu.gender) 45 46 # 2. 增 47 stu.aaa = 'aaa' 48 49 # 3. 改 50 stu.name = 'bbb' 51 52 # 4. 删除 53 del stu.name 54 print(stu.__dict__) 55 56 57 # 类中的方法,类可以调用,对象也可以调用 58 # 类调用方法 59 Student.choose_course(stu, 'python') # 类来调用,函数的参数有几个就要传几个 60 print(Student.choose_course) 61 62 # 对象调用方法 63 # 类中的方法,类可以调用,对象也可以调用, 但是,推荐对象来调用,因为对象来调用,会把自己当成第一个参数传递给函数 64 stu.choose_course('python') # stu.choose_course(stu, 'python') 65 66 class Teacher(): 67 pass 68 print(isinstance(123, int)) 69 print(isinstance(stu, Teacher))