1.面向过程与面向对象
面向过程编程与面向对象编程
面向过程编程
面向过程的核心是过'过程'二字,强调'流程'
即先干什么,再干什么,最后干什么
# 举例
洗衣服
1.先把衣服放入洗衣机
2.再放入洗衣液
3.打开开关
强调过程
编程当中:
优点:把复杂的问题流程化,进而简单化
缺点:牵一发而动全身,扩展性差,可维护性差
应用场景:对扩展性要求不高的地方
面向对象编程
面向对象核心是'对象'二字
什么是'对象'
1.程序中:
函数:盛放数据的容器
对象:盛放数据和函数的容器
2.生活中
一切皆对象
对象:特征与技能的结合体
编程当中
优点:扩展性强,可维护性强
缺点:编程复杂度较高
应用场景:对扩展性要求较高的地方
类的定义和对象的的产生
定义
对象:特征与技能的结合体
类:一系列相似特征与相似对象的结合体
问题
先有类还是先有对象:
1.程序中:
必须先定义类,然后调用类产生对象
2.生活中
先有对象,再有人类
专业语法定义
1.定义函数
def 函数名():
pass
2.定义类
class 类名():
pass
定义类
发生了什么事?
1.立即执行类体代码
2.产生一个类的名称空间,把类体里面的执行的名字都扔到名称空间中(大字典)
3.'''把类的名称空间绑定给__dict__,类名.__dict__'''
'''类名一般情况下使用大驼峰体书写(首字母大写)'''
class Student():
# 定义一个属性
school = 'SH'
# 定义一个技能(函数)
def choose_course(stu_dict, course):
stu_dict['course'].append(course)
print('%s选课成功' % (stu_dict['name'], stu_dict['course']))
# 查看类的名称空间
print(student.__dict__)
对象属性
class Student():
# 定义一个属性
school = 'SH'
''' 初始化方法
调用类自动触发的函数
不是一定要定义,需要用到就定义,不需要可以不定义'''
def __init__(stu_obj, name, age, gender):
stu_obj.name = name
stu_obj.age = age
stu_obj.gender
stu1.__dict__['name'] = 'jason'
stu1.__dict__['age'] = 18
stu1.__dict__['gender'] = 'male'
# 定义一个技能(函数)
def choose_course(stu_dict, course):
stu_dict['course'].append(course)
print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course']))
调用类发生了几件事
'''
1.得到一个空对象
2.调用Student.__dict__(空对象,'jason', '18', 'gender')
3.得到一个初始化的结果
'''
stu1 = Student()
print(stu1.__dict__)
print(stu2.__dict__)
print(stu1.name)
print(stu2.name)
# 属性的查找:先从自己的对象中查找,然后在去产生对象的类中取找
stu1.school = 'aaaa'
print(stu1.school
属性的查找
属性的查找
1.类属性:在类中写的属性称为类属性
2.对象属性:在对象名称空间中的属性就是对象属性
类属性的查找
1.查
print(Stu.school)
2.增加
Stu.country = 'China'
3.改
Stu.school = 'BJ'
4.删除
del Stu.school
#实例化对象,stu就是一个实例
stu = Student('jason', 18, 'male')
对象属性
1.查
print(stu.age)
2.增
stu.aaa = 'bbb'
3.改
stu.name = 'ccc'
4.删除
del stu.name
'''类中的方法,类可以调用,对象也可以调用'''
类调用方法
Student.choose_course(stu, 'python') # 类来调用,函数的参数
# 有几个就穿几个
print(Student.choose_course)
''''
类中的方法,类可以调用,对象也可以调用,但是推荐对象来调用,
因为对象来调用,会把自己当成第一个参数传递给函数
'''
stu.choose_course('python')