面向过程编程和面向对象编程
编程本质:
-
定义出一系列数据,定义出一系列功能,用功能操作数据实现人们想要的要求
1面向过程编程
定义:
针对问题/要实现的功能,先列出具体的解决步骤,再分布写具体内容
类似工厂的流水线,每一工序完成一个功能,前后是有逻辑关系的.
优点:
逻辑清晰,便于理解
缺陷:
后期要更改某块代码,那么会牵一发而动全身,很可能多个功能模块都做一定更改(扩展性较差)
实例
import json """ 面向过程编程 扩张性差案例 <用户注册系统> 以下都封装成函数 1 输入用户信息 2 校验信息(为示例方便:这里仅校验用户输入是否为空) 3 注册 4 三个函数再封成一个函数,到时候调用此函数就是执行注册 """ # 思考: 本例中函数返回值如何组织的,为什么? # step1 def interinfo(): username = input('username>>>:').strip() password = input('password>>>:').strip() return {'username': username, 'password': password} # step2 def check_interfo(interinfo_return): is_register = True # # 写法1 # if len(interinfo_return.get('username')) == 0: # print('用户名不能为空') # is_register = False # if len(interinfo_return.get('password')) == 0: # print('密码不能为空') # is_register = False # 写法2 if len(interinfo_return.get('username')) != 0 and len(interinfo_return.get('password')) != 0: pass else: print('密码或用户名输入为空') is_register = False return {'is_register': is_register, 'interinfo_return': interinfo_return} # step3 def register(check_info_return): if check_info_return.get('is_register'): import json with open(r'a.txt', 'w', encoding='utf-8') as f: # 注意:a.txt 是相对路径 json.dump(check_info_return.get('interinfo_return'), f) # step4 def start(): interinfo_return = interinfo() check_info_return = check_interfo(interinfo_return) register(check_info_return) if __name__ == '__main__': start()
2面向对象编程
定义:基本思路
把程序用要用到的,相关联的数据和功能整合到对象里边去,然后去使用
3 类与对象
-
定义:
-
对象: 存放数据与功能的容器
-
将原本分散的相关数据和功能整合到对象里
-
类: 存放多个对象相同数据和功能的容器
-
类的意义:节省空间,减少代码冗余的机制,面向对象编程核心使用对
"""
1 定义一个类
2 产生对象/实例化
定义:调用类的过程就是实例化 # 每实例化一次Student,就得到一个学生对象
格式: 要产生的对象名 = 类名(属性名)
3 (增加/更改/删除)对象属性(增改删类属性,方法一样)
格式
增:
简写: 对象名.新属性名 = 属性值 # 等价于 >: 对象名句点符双下dict = 属性值
改:
简写: 对象名.属性名 = 新属性值 # 等价于 >: 对象名句点符双下dict = 新属性值
删除格式:
del 对象名.属性名
4 如何查看对象属性<对象内部数据是用字典组织的>
格式:
1: print(对象名.属性名)
2: 用字典取值方法
>: print(对象名.__dict__.get('属性名'))
5 对象,类 调用类中属性
格式:
对象:
调用类中属性值: 对象名/类名.属性值
调用类中方法: 对象名/类名.方法
6 属性及查找顺序:
类属性:
在类中定义的变量是类的数据属性,共享给所有对象用,指向相同的内存地址;
定义的函数是类的函数属性
对象属性:对象名称空间中独有属性,相似属性在类中
查找顺序:
对象访问属性时,先从自己__dict__中找,未找到,则去类__dict__中查找
"""
详细理解
# # 1 定义一个类 # class Student(): # 类名:驼峰体 # school = 'sh' # 'school': 'bj' # # def __init__(self, name, age): # self.name = name # self.age = age # self.course = [] # # return 在类中不能有函数返回值 # def choose_course(self, course): # self.course.append(course) # print('%s选课%s' % (self.name, self.course)) """ 2 产生对象/实例化 定义:调用类的过程就是实例化 格式: 要产生的对象名 = 类名(属性名) """ # stu1 = Student('jack', 23, 'art') # 每实例化一次Student,就得到一个学生对象 # stu2 = Student() """ 3 (增加/更改/删除)对象属性(增改删类属性方法一样) 格式 增: 简写: 对象名.新属性名 = 属性值 # 等价于 >: 对象名句点符双下dict = 属性值 改: 简写: 对象名.属性名 = 新属性值 # 等价于 >: 对象名句点符双下dict = 新属性值 删除格式: del 对象名.属性名 """ # 改 # stu1.name = 'tom' # stu1.__dict__['name'] = 'tom' # 增 # stu1.hobby = 'run' # stu1.__dict__['name'] = 'tom' # print(stu1.__dict__.get('hobby')) # run # 删 # del stu1.hobby # print(stu1.__dict__.get('hobby')) """ 4 如何查看对象属性<对象内部数据是用字典组织的> 格式: 1: print(对象名.属性名) 2: 用字典取值方法 >: print(对象名.__dict__.get('属性名')) """ # print(stu1.name) # print(stu1.__dict__) # print(stu1.__dict__.get('name')) """ 5 对象,类 调用类中数据和函数属性 """ # 1 调用数据属性 # print(stu1.school) # print(Student.school) # 2 调用函数属性 # stu1.choose_course('art') # Student.choose_course(stu1, 'art')