1.面向过程和面向对象
面向过程:
实现:
把完成某个需求的 所有步骤 从头到尾 逐步实现
根据需求,将某些 功能独立 的代码 封装 成一个一个的函数
完成代码,顺序调用 不同的函数
特点:
注重 过程和步骤,不注重 职责和分工
需求复杂,代码会很复杂
开发复杂项目 没有固定套路 难度很大
相对函数 面向过程没有返回值(函数能执行,可以返回结果)
面向对象
三大特征:封装、继承、多态
实现:
完成某个需求,首先确定 职责 - 要做的事情
根据职责 确定不同的对象 在对象内部 封装不要的方法(多个)
完成代码 顺序地让 不同对象 调用不同的方法
特点:
注重 对象和职责 不同的对象承担不同的职责
适合应对复杂的需求变化 是专门应对复杂项目开发,提供固定套路
需要在面向过程的基础上,掌握面向对象的语法
相对函数 面向对象是更大的 封装 根据职责在一个对象中封装多个方法
2.类和对象
类:对一群具有相同特征或行为的事物的一个统称,是抽象的,不能直接使用,是一个模版,负责创建对象
特征 --> 属性
行为 --> 方法
对象:由类创建出来的具体存在,可以直接使用
不同对象,属性可能各不相同
先有 类 再有 对象,类只有一个,对象可以很多
设计类的三个要素:
类名 - 大驼峰命令法 eg:Person
属性 - 类的特征
方法 - 类的行为
3.面向对象语法
在Python中,变量、数据、函数都是对象
定义类:(第一个参数必须是self,类名必须符合大驼峰命名法)
class 类名:
#self:哪一个对象调用的方法,self就是哪一个对象的引用
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
创建对象:
对象变量 = 类名()
#解释器自动执行:
为对象在内存 分配空间--创建对象;
为对象属性 设置初始值 - 初始化方法(init)
__init__ 是对象的内置方法,专门定义一个类具有哪些属性的方法;
创建属性:
方法一:不推荐 对创建的对象 采用赋值方法
对象变量.属性名 = 属性值
可以通过self. 访问对象的属性
可以通过self. 调用其他对象的方法
方法二:在类的内部封装属性
初始化方法:
初始化方法(init) 为对象属性 设置初始值
__init__ 是对象的内置方法,专门定义一个类具有哪些属性的方法;
方法一:def __init__(self):
print("初始化方法")
self.name = "Tom"
方法二:def __init__(self,new_name):
print("初始化方法")
self.name = new_name
eg:
#创建类
class Cat:
def __init__(self):
print("初始化方法")
self.name = "Tom"
"""
def __init__(self,new_name):
self.name = new_name
"""
def eat(self):
print("cat like eat fish")
print("%s like eat fish" % self.name)
def run(self):
print("cat like run")
#创建对象
tom = Cat()
"""
tom = Cat("Tom")
"""
#创建属性 - 不推荐
#弊端: 不能调换顺序(python 执行从上而下),若放在方法后tom.eat(),找不到赋值语句
tom.name = "Tom" #结合self.name使用
tom.eat()
tom.run()
4.对象内置方法
__del__ #对象被从内存中销毁前 会被自动调用
__str__ #返回对象的描述信息,print 函数输出使用
使用场景:
在开发中,希望使用print 输出对象变量时,能够打印自定义的内容 就可以利用__str__ 内置方法
必须返回字符串
5.面向对象 - 封装
对象方法的实现细节 封装在类的内部
把属性和方法封装在类中
类与类之间保留2个空行
一般那个类先被创建,就需要先构建该类
定义属性,不确定设置的初始值时,可以设置为 None
一个对象的属性 可以是其他类创建的对象
6.身份运算符(is / is not)
is / is not 用于比较两个对象的内存地址 是否一致
== 用于判断 引用变量的值 是否相等
Python中针对 None 比较时,建议使用 身份运算符 判断
7.eg:
1 | # 跑步与体重案例 |
1 | # 摆放家具案例 |
参考资料:
1.黑马视频
2.W3C-Python