面向过程编程vs函数式编程
# 面向过程编程 测量对象的元素个个数。 s1 = 'fjdsklafsjda' count = 0 for i in s1: count += 1 l1 = [1,2,3,4] count = 0 for i in l1: count += 1
def func(s): count = 0 for i in s: count += 1 return count func('fdsafdsa') func([1,2,3,4]) 函数式编程
通过对比可知:函数编程较之面向过程编程最明显的两个特点:
1,减少代码的重用性。 2,增强代码的可读性。
类与对象
在现实世界中:先有对象,再有类 在程序中:务必保证先定义类,后产生对象 属性 ,方法 ≈ 变量(数据),函数(功能)
**面向过程:** 面向过程核心是过程二字,过程就是先干什么,在干什么,最后干什么 过程的终极奥义就是将程序流程化 过程是"流水线",用来分步骤解决问题的 优点:复杂的问题简单化,进而流程化 缺点:扩展性差,可维护性差 应用场景:应用在扩展性要求不高的地方, eg:安装包的使用 **面向对象:** 核心是"对象"二字 对象的终极奥义就是将程序"整合" 对象是"容器",用来盛放数据与功能的 优点: 扩展性强,可维护性强 缺点: 编程复杂度高 应用场景:用在扩展性要求高的地方, eg:微信,qq
程序=数据+功能 类也是"容器",该容器用来存放同类对象共有的数据与功能 写程序前:先思考哪些数据与功能可以整合到一起————————>对象 先定义类,在调用类产生对象 调用类的过程又称之为实例化,发生了三件事 1、先产生一个空对象 2、python会自动调用类中的__init_.方法然将空对象已经调用类时括号内传入的参数一同传给__init__方法 3、返回初始完的对象
**定制对象自己独有的属性和方法
class Student(): # 定义属性 school = 'SH' # 当调用类的时候,会自动调用的函数, 初始化方法 (********) # def __init__(stu_obj, name, age, gender): # # stu_obj => stu1 # stu_obj.name = name # stu1.__dict__['name'] = 'egon' # stu_obj.age = age, # stu1.__dict__['age'] = 18 # stu_obj.gender = gender # stu1.__dict__['gender'] = 'male' def choose_course(stu_dic, course): stu_dic['courses'].append(course) print("%s选课成功 %s" % (stu_dic['name'], stu_dic['courses'])) stu=Student() print(stu.__dict__) # 调用类 """ 调用类发生什么事? 1. 会自定触发__init__方法 2. 把对象本身当成第一个参数自动传递给了__init__方法 """ # stu1 = Student('egon', 18, 'male') # Student(stu1, 'egon', 18, 'male') # stu2 = Student('egon1', 18, 'male') # Student(stu2, 'egon', 18, 'male') # stu2 = Student() # stu3 = Student() stu2 = Student() stu1 = Student()
属性的查找
class Student(): # 定义属性 school = 'SH' # country = 'Chinese' # 当调用类的时候,会自动调用的函数, 初始化方法 (********) def __init__(stu_obj, name, age, gender, courese=None): # stu_obj => stu1 if courese is None: courese = [] stu_obj.name = name # stu1.__dict__['name'] = 'egon' stu_obj.age = age, # stu1.__dict__['age'] = 18 stu_obj.gender = gender # stu1.__dict__['gender'] = 'male' stu_obj.courese = courese # stu1.__dict__['gender'] = 'male' def choose_course(stu_obj, course): # stu_obj => stu # stu_dic['courses'].append(course) stu_obj.courese.append(course) """ stu_obj = {'name': 'egon', 'age': (18,), 'gender': 'male', 'courese': []} """ print("%s选课成功 %s" % (stu_obj.name, stu_obj.courese)) stu = Student('egon', 18, 'male') stu1 = Student('egon1', 18, 'male') # print(stu.__dict__) # 类属性的查找 # print(Student.__dict__['school']) # 查 # print(Student.school) # 增加 # Student.country = 'Chinese' # 修改 # Student.school = 'BJ' # 删除 # del Student.school # Student.choose_course(stu, 'python') # Student.choose_course(stu1, 'linux') # print(Student.choose_course) # print(Student.__dict__) # 对象的属性查找 # print(stu.__dict__) # print(stu.name) # print(stu.age) # print(stu.gender) # # stu.name = 'xxx' # print(stu.name) # print(stu.__dict__) # stu.school = 'xxxxxxx' # print(stu.__dict__) # print(stu.school) # 类中的方法类可以调用,但是推荐对象来调用,对象来调用,把对象本身当成第一个参数传递给函数的第一个参数 stu.choose_course('python') # stu.choose_course(stu, 'python') stu1.choose_course('linux') # stu.choose_course(stu, 'python')
总结__init__方法 1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据 2、init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码,想要在 类调用时就立刻执行的代码都可以放到该方法内 3、-_init__方法必须返回None