面向对象编程与类的定义和函数的产生

一.面向对象编程

面向对象编程的核心是对象

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))

 

posted @ 2021-12-03 19:45  bug俱乐部  阅读(94)  评论(0)    收藏  举报