面向对象
面向过程简介
1、概念
面向过程核心就是过程二字,就是解决问题的流程。
2、优缺点以及应用场景
优点:复杂问题流程化进而简单化
缺点:牵一发而动全身,扩展性差,可维护性差
应用场景:对扩展性要求不高的地方。
3、例子:注册功能的例子
# 1. 用户输入用户名和密码 def interactive(): username = input('请输入用户名:').strip() password = input('请输入密码:').strip() email = input('请输入邮箱').strip() return { 'username': username, 'password': password, 'email':email } # 2. 验证参数 def check_info(userinfo): is_valid = False if len(userinfo['username']) == 0: print('用户名必须输入') is_valid = True if len(userinfo['password']) == 0: print('密码必须输入') is_valid = True if len(userinfo['email']) == 0: print('邮箱必须输入') is_valid = True return { 'is_valid': is_valid, 'userinfo': userinfo } # 3. 写入文件,注册成功 def register(param): if not param['is_valid']: with open('userinfo.txt', 'w', encoding='utf-8') as f: import json json.dump(param['userinfo'], f) def main(): # 1. 让用户输入用户名 userinfo = interactive() # 2. 校验参数 check_param = check_info(userinfo) # 3. 注册 register(check_param) if __name__ == '__main__': main()
面向对象
1、概念
面向对象的核心就是对象二字
2、什么是对象
1、程序中
盛放数据和函数的容器(函数是盛放数据的容器)
2、现实生活中
一切皆对象(对象就是特征和功能的结合体)
3、优缺点以及应用场景
优点:扩展性强,可维护性强
缺点:编程复杂度高
应用场景:对扩展性要求较高的地方
4、代码演示
def choose_course(stu_dict, course): stu_dict['course'].append(course) print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course'])) stu1 = { 'name': 'jason', 'age': 18, 'gender': 'male', 'course': [], 'choose_course': choose_course } stu2 = { 'name': 'ly', 'age': 18, 'gender': 'male', 'course': [], 'choose_course': choose_course } stu1['choose_course'](stu1, 'python') stu2['choose_course'](stu2, 'python')
类的定义和对象的产生
1、类和对对象的定义
对象:特征与技能的结合体
类:一系列对象相似的特征与相似的技能的结合体
强调:站在不同的分类,划分的分类不一定一样
2、类和对象的先后顺序
1、程序中
必须先定义类,然后调用类产生对象
2、现实生活中
先有对象,再有类
3、类的语法
class 类名: '类的文档字符串' 类体 #我们创建一个类 class Data: pass
强调:类名定义都是驼峰体,即单词的首字母大写
4、定义类所发生的事
1、立即执行类体代码
2、产生一个类的名称空间,把类体里面执行的名字都扔到名称空间中(就是大字典中)
3、把类的名称空间绑定给__dict__,类名 .__dict__
5、代码演示
class Student(): # 定义一个属性 school = 'SH' # 定义一个技能(函数) def choose_course(stu_dict, course): stu_dict['course'].append(course) print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course']))
6、查看类的名称空间
print(Student.__dict__)
7、产生对象
调用类产生对象时,默认产生的就是一个空对象{}
stu1 = Student() stu2 = Student() stu3 = Student() print(stu1.__dict__) print(stu2.__dict__) print(stu3.__dict__)
给对象定制自己独有的属性
1、调用类发生的事
1、得到一个空对象
2、调用Student.__dict__(空对象,'tony' . 18. 'male')
3、得到一个初始化的结果
2、代码
class Student(): # 定义一个属性 school = 'SH' # 初始化方法 # 调用类自动触发的函数 # 该方法不是一定要定义,需要用到就定义,不需要刻意不定义 def __init__(stu_obj, name, age, gender): # 空对象.name = name # 空对象.age = age # 空对象.gender = gender stu_obj.name = name # stu1.__dict__['name'] = 'tony' stu_obj.age = age # stu1.__dict__['age'] = 18 stu_obj.gender = gender # stu1.__dict__['gender'] = 'male'、 # return None # 在这个方法中不能有返回值, # 定义一个技能(函数) def choose_course(stu_dict, course): stu_dict['course'].append(course) print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course'])) stu1 = Student('tonmy', 18, 'male') stu2 = Student('tom', 18, 'male') # stu1 = Student() # print(stu1.__dict__) # print(stu1.name) # print(stu2.name)
注:属性的查找:先从自己的对象中查找,然后再去产生对象的类中去找
属性的查找顺序
1、代码
class Student(): # 定义一个属性 school = 'SH' def __init__(self, name, age, gender, course=None): if course is None: course = [] self.name = name # stu1.__dict__['name'] = 'jason' self.age = age # stu1.__dict__['age'] = 18 self.gender = gender # stu1.__dict__['gender'] = 'male' self.course = course def choose_course(self, course): # stu_dict => stu self.course.append(course) print('%s选课成功 %s' % (self.name, self.course)) stu = Student('tony', 18, 'male')
2、属性的查找
1、类属性:在类中写的属性就称之为类属性
2、对象属性:在对象自己的名称空间中的属性就是对象属性
3、类属性的增删改查
1、查
print(Student.school)
2、增
Student.country = 'China'
3、改
Student.school = 'BJ'
4、删
del Student.school
4、对象属性的增删改查
1、查
print(stu.name)
2、增
stu.aaa = 'aaa'
3、改
stu.name = 'bbb'
4、删
del stu.name
5、类和对象调用方法
1、类调用方法
类来调用,函数的参数有几个就要传几个
2、对象调用方法
类中的方法,类可以调用,对象也可以调用;但是推荐对象来调用,因为对象来调用,会把自己当作第一个参数传递给函数