面向对象
一:面向对象基本概念
- 面向过程与面向对象区别: 面向过程-------怎么做? 面向对象-------谁来做?
- 面向对象特点:
注重对象和职责,不同的对象承担不同的职责
是专门应对复杂项目开发,提供的固定套路
需要在面向过程基础上,再学习一些面向对象语法 - 面向对象编程步骤:
将属性和方法封装到一个抽象的类中
外界使用类创建对象,然后让对象调用方法
对象方法的细节都被封装在类的内部
二:类和对象
- 类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用 对象是由类创造出来的一个具体存在,可以直接使用
- 类的设计:
分析需求,查看需要的类
类名的确定
属性和方法的确定
三:面向对象基础语法
- dir内置函数 定义简单的类
定义只包含方法的类:
格式:
class Cat:
def eat(self):
print("小猫爱吃鱼")
def drink(self):
print("小猫要喝水")
- 创建对象: 格式:对象变量 = 类名()
- 初始化方法:
初始化方法__init__是专门用来定义一个类具有哪些属性的方法
再初始化方法内部定义属性:使用self.属性名 = 属性的初始值
初始化方法改造------初始化的同时设置初始值:init(self,参数) - 内置方法和属性:
__del__方法:如果希望在对象被销毁前,再做一些事情,可以考虑
__del__方法
__str__方法:如果希望使用print输出对象变量时,能够打印自定义 内容,就可以用__str__方法
四:面向对象封装
- 封装是面向对象编程的一大特点
- 一个对象的属性可以是另外一个类创建的对象
- 身份运算符:用于比较两个对象的内存地址是否一致----是否对同一个对象的引用
- 私有属性和私有方法:不希望对外界公开
- 在定义属性或方法时,在属性名或者方法名前增加两个下划线,就是私 有属性或私有方法
在日常开发中,不要使用这种方式,访问对象的私有属性或私有方法
五:面向对象继承
- 继承的作用:继承实现代码的重用,相同的代码不需要重复的编写
- 继承的概念:子类拥有父类的所有方法和属性
- 继承的语法:class 类名(父类名):
pass - 专业术语:子类也叫派生类,父类也叫基类,类继承也叫类派生
- 继承的传递性:子类拥有父类以及父类的父类中封装的所有属性和方法
- 方法的重写
原因:父类的方法实现不能满足子类的需要,需要进行重写
实现方法:在子类中定义了一个和父类同名的方法并且实现 - 关于super
super是一个特殊的类
super()就是使用super类创建出来的对象
使用场景:重写父类方法时,调用在父类中封装的方法实现 - 父类的私有属性和私有方法
子类对象不能在自己的方法内部,直接访问父类的私有属性或私有方法, 可以通过父类的公有方法间接访问到私有属性或私有方法 - 多继承
子类拥有多个父类,并且具有所有的属性和方法
多继承的语法:class 子类名(父类名1,父类名2,…)
pass
注意事项:尽量避免不同的父亲存在同名的属性或方法 - 新式类和旧式(经典)类
新式类:以object为基类的类,推荐使用
旧式类:不以object为基类的类,不推荐使用
新式类和经典类在多继承时,会影响到方法的搜索顺序
六:面向对象多态
- 多态的概念:不同的子类对象,调用相同的父类方法,产生不同的执行结果
- 多态的特点
多态可以增加代码的灵活度
以继承和重写父类方法为前提
是调用方法的技巧,不会影响到类的内部设计
七:类
- 类的结构
术语----实例
创建出来的对象叫做类的实例
创建对象的动作叫做实例化 - 对象的属性叫做实例属性
对象调用的方法叫做实例方法 - 类是一个特殊的对象
class定义的类属于类对象
obj定义的类属于实例对象 - 类属性和实例属性
类属性就是给类对象定义的属性 - 类方法和静态方法
类方法就是针对类对象定义的方法
语法格式: @classmethod
def 类方法名(cls):
pass
静态方法条件
既不需要访问实例属性或者调用实例方法
也不需要访问类属性或者调用类方法
静态方法语法格式:@staticmethod
def 静态方法名():
pass
八:单例
- 单例设计模式
设计模式是前人工作的总结和提炼
使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码 可靠性 - 目的:让类创建的对象,在系统中只有唯一的一个实例
- __new__方法
__new__方法是一个由object基类提供的内置的静态方法 - 作用
在内存中为对象分配空间
返回对象的引用 - python中的单例
单例是让类创建对象,在系统中只有唯一的一个实例
九:异常
- 定义:程序在运行时,如果遇到一个错误,会停止程序的执行,并且提示一些错误信息
- 抛出异常定义:程序停止运行并且提示错误信息
- 作用:可以针对突发事件做集中处理,从而保证程序的稳定性和健壮性
- 捕获异常
使用场景:对某些代码的执行不能确定是否正确,可以增加捕获异常 - 语法:try:
尝试执行的代码
except:
出现错误的处理 - 错误类型捕获
作用:针对不同类型的异常,做出不同的响应 - 异常的传递
当函数/方法执行出现异常,会将异常传输给函数方法的调用一方
作用:不需要在代码中,增加大量的异常捕获,能够保证代码的整洁 - 抛出raise异常
应用场景:根据应用程序特有的业务需求主动抛出异常
抛出方法
创建一个exception的对象
使用raise关键字抛出异常对象
十:模块
- 模块是python程序架构的一个核心概念
- 定义:一个独立的python文件就是一个模块
- 模块名的命名规则必须符合标识符的命名规则
- 如果想要使用模块,必须先导入这个模块 import导入
语法:import 模块1 用法:通过 模块名. 可以使用模块中的工具 - from…import导入
使用场景:如果希望从某一个模块中导入部分工具 注意:如果两个模块存在同名函数,那么后导入模块的函数,会覆盖先导入 的函数 - 原则------每一个文件都应该是可以被导入的
- __name__属性
__name__属性可以做到,测试模块的代码只在测试情况下被运行,而在 被导入时不会被执行 - 包
包是一个包含多个模块的特殊目录
包名的命名方式和变量名一致
好处:可以一次性导入包中所有的模块
十一:文件
- 定义:计算机的文件,就是存储在某种长期储存设备上的一段数据
- 作用:将数据长期保存下来,在需要的时候使用
- 存储方式
文本文件:可以使用文本编辑器查看
二进制文件:保存的内容不能直接阅读,而是提供给其他软件使用 - 文件的基本操作
操作文件步骤:打开文件,读写文件,关闭文件
open函数----打开文件
read方法可以一次性读入并返回文件的所有内容
close方法负责关闭文件 - 打开文件的方式
语法:f = open(“文件名”,”访问方式”)
按行读取文件的内容
readline方法:可以一次读取一行内容 - 文件/目录的常用管理操作
. 文件操作
rename 重命名文件 os.rename(源文件名,目标文件名)
remove 删除文件 os.remove(文件名)
. 目录操作
listdir 目录列表 Os.listdir(目录名)
mkdir 创建目录 Os.mkdir(目录名)
rmdir 删除目录 Os.rmdir(目录名)
getcwd 获取当前目录 Os.getcwd()
chdir 修改工作目录 Os.chdir(目标目录)
path.isdir 判断是否为文件 Os.path.isdir(文件路径)
十二:eval函数
作用:将字符串当成有效表达式来求值并返回计算结果
注意:不要使用eval直接转换input的结果