概述
面向过程
分析除解决问题的步骤,然后逐步实现。
例如:婚礼筹办
-- 发请柬(选照片、措词、值作)
-- 宴席(场地、厨师、桌椅餐具,菜品)
-- 婚礼仪式(婚礼仪式流程,主持人)
公式:程序 = 算法 + 数据结构
优点:所有环节、细节自己掌控
缺点:考虑所有细节,工作量大
面向对象
找出解决问题的人,然后分配职责
例如:婚礼筹办
-- 发请柬 -- 摄影公司
-- 宴席 -- 酒店
-- 婚礼仪式 -- 婚庆公司
公式:程序 = 对象 + 交互
优点:
(1)思想层面
-- 更接近于人的思维方式
-- 有利于梳理归纳,分析解决问题
(2)技术层面
-- 高复用:对重复的代码进行封装,提高开发效率
-- 高扩展:增加新的功能,不修改以前的代码
-- 高维护:代码可读性好,逻辑清晰,结构完整
缺点:考虑所有细节,工作量大
类和对象
类:一个抽象的概念,即生活中的“类别”
对象:类的具体实例,即归属于某个类别的“个体”
类是创建对象的“摸板”
-- 数据成员:名词类型的状态。
-- 方法成员:动词类型的行为。
类与类行为不同,对象与对象数据不同
例如:学生是一个类,具有姓名,年龄的数据,也具有学习和工作的行为。张三是一个对象
狗是一个类,具有类型,姓名,重量,也具有玩和叫的行为。拉布拉多是一个对象
语法
定义类
代码:
class Dog:
"""文档说明"""
def __init__(self,param):
self.name = param
说明:
-- 类名所有单词首字母大写
-- __init__也叫构造函数,创建对象时被调用
-- self 变量绑定的是被创建的对象,名称可以修改
创建对象(实例化)
dog1 = Dog("小黑")
实例成员
实例变量
语法:
定义 / 调用:对象.变量名
说明:
首次通过对象赋值为创建,再次赋值为修改
通常在构造函数(__init__)中创建
每个对象存储一份,通过对象地址访问
作用:描述所有对象的共有数据
__dict__:对象的属性,用于存储自身示例变量的字典
实例方法
语法:
定义:def 方法名称(self,参数列表):
调用:对象地址.实例方法名(参数列表),不建议通过类名访问实例方法
说明:
至少有一个形参,第一个参数绑定调用这个方法的对象,一般命明为”self“
无论创建多少对象,方法只有一份,并且被所有对象共享
作用:表示对象行为
类成员
类变量
类方法
语法:
定义:
@classmethod
def fun01(cls,param):
pass
调用:类名.方法名(参数列表)
不建议通过对象访问类方法
说明:
至少有一个形参,第一个形参用于绑定类,一般命名为”cls”
使用@classmethod修饰的目的是调用方法时可以隐式传递类对象
类方法中不能访问实例成员,实例方法可以访问类成员
作用:操作类变量
静态方法
语法:
定义:
@staticmethod
def fun02(param):
pass
调用:类名.方法名(参数列表),不建议通过对象访问静态方法
说明:
使用@staticmethod 修饰的目的式该方法
静态方法不能访问实例成员和类成员
作用:定义常用的工具函数