从这一篇开始,我们计入面向对象编程的学习。 那什么是面向对象编程呢? 首先我们先简单介绍一下一些基本定义:
面向对象编程:一种编程范式
编程范式:面向过程/面向对象
数据结构:列表,字典什么的 用来高效存储数据的结构
算法:编程逻辑
- 面向过程编成
核心是过程二字,过程指的是解决问题的步骤。-- 设计一条流水线,机械式的思维方式。把问题分解后逐步处理
- 优点:
- 把复杂的问题流程化,进而简单化
- 缺点:
- 可扩展性差
- 面向对象编程-上帝视角:一切皆对象
什么是对象:对象就是特征与技能的结合体
- 优点:
- 可扩展性强,
- 缺点:
- 编程复杂度高
- 应用场景:
- 用户需求经常变化,互联网应用,游戏,企业内部应用
面向对象编程有3大特性:
- 继承
- 多态
- 封装
面向对象和面向过程各有所长,所以看情况来选择方式
7.1 类 class
类就是一系列对象相似的特征与技能的结合体
强调:站在不同的角度,得到的分类是不一样的
在现实世界中:现有的对象,后有类
在程序中:先定义类,后生成(实例化)对象
分析的时候可以先从对象入手,例如下面的学生类:
- 分析
- 在现实世界中:
- 对象1:王小明
- 特征:
- 学校=aaa学院
- 名字=王小明
- 性别=男
- 年龄=12
- 技能:
- 学习
- 吃饭
- 睡觉
- 特征:
- 对象2:李晓雨
- 特征:
- 学校=aaa学院
- 名字=李晓雨
- 性别=女
- 年龄=11
技能:
学习
吃饭
睡觉
- 特征:
- 对象1:王小明
- 总结现实世界中的学生类:
- 相似的特征:
- 学校="aaa学院"
- 相似的技能:
- 学习
- 吃饭
- 睡觉
- 相似的特征:
- 定义类
class Student:
school = 'aaa' # 特征:变量
def learn(self): # 技能:函数
print('learning')
def eat(self): # 这个self就是用来自动传参,不一定非要用self,用x什么的也行,只是约定俗成用self
print('eating')
def sleep(self):
print('sleeping')
- 产生对象:实例化
stu1 = Student() # 类的返回就是个对象:实例化
stu2 = Student()
7.2 类如何使用
类在定义的阶段,类就已经执行了。
函数定义的阶段,不会执行,只有调用了才会执行。
类的属性操作(增删改查)及实例化:
class Student:
school = 'aaa' # 变量又称-类的数据属性
def learn(self): # 函数又称-类的函数属性
print('learning')
def eat(self):
print('eating')
def sleep(self):
print('sleeping')
print('=====run=====') # 测试执行定义类的语句是否执行内部代码
# 查看类的命名空间
print(Student.__dict__)
print(Student.__dict__['school']) # 可以访问,但是我们可以用python提供的方法访问类的属性
print(Student.__dict__['learn']) # 可以访问,但是我们可以用python提供的方法访问类的属性
# 访问类的属性:查看类的属性
print(Student.school)
print(Student.learn)
# 增加属性
Student.country = 'China' # 往字典里增加变量
print(Student.country)
# 删除
del Student.country
# 改
Student.school = 'bbb'
Student.school
# 实例化:生成一个对象
stu1 = Student() # 实例化一个叫做stu1的对象