一、面向过程编程
首先,在编程中,面向过程和面向对象是编程的两大编程思想,分别是:面向过程和面向对象,二不是一门新的技术栈.
1.1 什么是面向过程?
面向过程中核心是过程二字,过程就是先干什么、在干什么、最后干什么,就是机械式的思维方式。
生活案例:
# 把大象放冰箱需要几步?
1. 打开冰箱门
2. 把大象放进冰箱
3. 关上冰箱门
1.2 优点和缺点
优点:复杂的问题简单化、进而流程化
缺点:扩展性差,牵一发而动全身
应用场景: 一般用在对扩展性要求比较差的情况
每日练习:
使用面向过程写一个注册的案例来体会面向过程的优缺点
1. 先让用户输入用户名和密码
def get_userinfo(): username = input('username:>>>').strip() password = input('password:>>>').strip() email = input('email:>>>').strip() return { 'username': username, 'password': password, 'email': email, }
2. 验证参数
def check_info(userinfo): flag = True if len(userinfo['username']) == 0: print('用户名不能为空') flag = False if len(userinfo['password']) == 0: print('密码不能为空') flag = False if len(userinfo['email']) == 0: print('邮箱不能为空') flag = False return { 'flag': flag, 'userinfo': userinfo }
3. 直接把数据写入文件中
def save_info(param): # 用来保存数据到文件中 """ param={ 'flag':flag, 'userinfo':userinfo } :param param: :return: """ if param['flag']: with open('userinfo.txt', 'w', encoding='utf-8') as f: import json json.dump(param['userinfo'], f) def main(): userinfo = get_userinfo() param = check_info(userinfo) save_info(param) if __name__ == '__main__': main()
二、面向对象编程
2.1 对象是什么?
在生活中:
对象就是'特征'与'技能'的集合体。
在程序中:
对象就是盛放'数据属性'和'功能'的容器。
2.2 优点和缺点
优点:扩展性强
缺点:简单的问题复杂化了
案例:学生选课系统
三、类的定义和对象的产生
对象:是特征与技能的结合体。
每日一问 到底是先有对象还是先有类?
1. 生活中
先有人,在有人类,那就是先有对象,在有类
2. 程序中:
一定是先有类,然后调用类,产生对象!!!!!!!
3.1 专业语法
类的定义 def index():pass class Student(): pass """ ## 函数中得括号一定不能省略 # def index(): # pass # class Stundent(): # pass # class Student(): # pass
注:
1. 关键字使用class来声明
2. class后面写的是类名,类名的命名:一般情况下遵循变量的命名规范即可,类名一般首字母都要大写,(小写也行,但是不推荐)
3. 如果你的类名比较长,推荐使用驼峰法,并且是大驼峰
4. 类名后面的小括号不能省略
3.2定义类
代码展示
class Student(): school = 'SH' # 类属性,其实就是变量吗? def choose_course(stu_dict, course): stu_dict['courses'].append(course) print("%s选课成功:%s" % (stu_dict['name'], stu_dict['courses'])) print(123)
定义类发生了哪些事情?
1. 类一旦定义完成,会立马执行类体代码
2. 会产生类的名称空间,其实就是一个大字典,然后把类中得名字都丢到类的名称空间去
3. 把类的名称空间绑定给 类名.__dict__中
3.3 如何查看类的名称空间?
print(Student.__dict__)
3.4 调用类产生对象
stu = Student()
print(stu)
3.5 如何查看对象的名称空间
print(stu.__dict__)
四、定制对象自己独有的属性
默认情况下,调用类产生一个对象,它是一个空对象,没有任何的数据
因此,我们需要给每一个对象添加数据
1.类里面一定要有这个方法吗? 不一定,也就是说,你如果需要提前定制对象的属性,你就写这个方法, 如果不需要,就不用写
def __init__(self, name, age, gender, course=None): if course is None: course = [] self.name = name # stu.__dict__['name'] = 'kevin' self.age = age # stu.__dict__['age'] = 18 self.gender = gender # stu.__dict__['gender'] = 'male' self.courses = course # stu.__dict__['courses'] = []
2. 函数写在类里面就称为是方法
def choose_course(stu_dict, course): stu_dict['courses'].append(course) print("%s选课成功:%s" % (stu_dict['name'], stu_dict['courses']))
五、属性的查找顺序
5.1 显示类属性的查找
class Student(): school = 'SH' stu = Student() 类属性的查找 1.查 print(Student.__dict__['school']) 2.增加 Student.x = 'xxx' Student.z = 666 print(Student.__dict__) 3.改 Student.school = 'BJ' print(Student.__dict__) 4.删除 del Student.school print(Student.__dict__) 对象自己的属性查找 1. 查 print(stu.name) print(stu.age) print(stu.gender) print(stu.x) print(stu.school) # SH print(stu.__dict__) 增加 stu.x = 666 stu1.x = 999 改 stu.x = 888 删除 del stu.x del stu.school print(stu.__dict__)