面向对象重点
与面向过程区别
面向过程
按照步骤逐一实现方法
面向对象
将实现目标过程中出现的所有元素进行抽象封装
特点
封装 继承 多态
封装
面向对象编程第一步就是将项目内容中出现的对象进行建模封装
将对象中需要用到的属性和方法逐一定义和实现
继承
在写一个新的类时,可以指定多个父类,使这个类完全继承指定的父类中的属性和方法
多态
在不同场景下 同样的方法呈现不同的效果
我们从现实生活中举例
比如 显示器 这个类都有 显示 这个方法
有两个子类 手机显示器 电脑显示器
我们想要将同一个 网页 分别在 手机显示器 电脑显示器 上 显示
因为手机和电脑的显示器尺寸不同,我们手机和电脑通常使用不同的显示方式
网页 在 手机显示器 和 电脑显示器 中 显示 内容的不同就是 多态的体现
语法
定义类
直接定义
class 类名:
# 定义方法
方法列表...
继承定义
class 类名(父类1, 父类2, 父类3, ...):
# 定义方法
方法列表...
方法
定义
def 方法名(self):
内部实现...
多态体现
父类中的方法子类可以直接重写
父类可以不实现方法 使用pass占位
属性
# 内部定义
self.属性名 = 值
# 外部定义
# 设置
实例名.属性名 = 值
# 获取
直接把 实例名.属性名 当作变量名使用
具象化实例
对象名 = 类()
方法调用
对象名.方法名()
self关键字
用于在类中对未来生成的实例进行操作
用于指向实例本身
因为我们在书写类时,其实是在书写一个用于生成实例的模板,self作为类对于未来会生成的实例的指示代词使用
相当于在java中的默认关键词 this
常用预设方法模板(魔法方法)
init(构造方法)
# 无参
def __init__(self):
self.变量名1 = 值1
self.变量名2 = 值2
# 有参
def __init__(self, 参数1, 参数2):
self.变量名1 = 参数1
self.变量名2 = 参数2
str(转字符串)
def __str__(self):
# 需要返回str 实现类与字符串转换
return (f'{self.变量名1}, {self.变量名2....}')
del(资源清理)
def __del__(self):
print('del自动调用了该方法 清理资源')
pass