type
status
date
slug
summary
tags
category
icon
password
📝 什么是对象和类
类(class): 一种“蓝图”或“模具”,描述一类事物的共有属性(数据)与行为(函数)。
对象(object): 根据类“生产”出来的具体实例(instance),拥有独立的属性值,但共享类中定义的方法。
Python 面向对象编程(OOP)是一种把“数据(属性)”和“操作数据的代码(方法)”封装在一起,进而组织程序的范式。核心概念是“对象”:对象由类(class)生成,类相当于模板,对象相当于实例。
📝 Python 类
1、类定义语法
1.1、最小可运行语法:
关键字
class
,后跟类名(PascalCase 约定)。冒号 + 缩进块(通常 4 空格)。
即使什么都不放,也要写
pass
,否则 SyntaxError
。1.2、包含属性、方法:
📝 三、类对象
1、相关概念
类对象(class object):由
class
语句执行后,Python 在内存中创建的对象,类型是 type
(元类)。实例对象(instance object):由“类对象”调用得到的具体个体,类型就是该“类对象”。
2、属性引用
2.1、属性引用语法
Python 中使用点号
.
运算符进行属性引用:2.2、属性查找顺序
当通过实例访问属性时,Python 按照以下顺序查找:
- 实例命名空间 - 首先检查实例自身的
__dict__
- 类命名空间 - 然后在实例的类中查找
- 基类命名空间 - 最后按照方法解析顺序(MRO)在基类中查找
当通过类访问属性时,查找顺序更简单:
- 类命名空间 - 在当前类中查找
- 基类命名空间 - 按照 MRO 在基类中查找
3、实例化
实例化其实就是调用类对象,从而创建一个实例对象
📝 实例对象
1、相关概念
通过类实例化操作生成对象就是实例对象
一个类可以多次实例化,生成多个实例对象
2、常说的面向对象编程是什么
- 设计类
- 创建类实例对象
- 实例对象调用方法
3、创建实例对象详解
- 在内存中为对象分配空间
- 调用初始化方法
__init__
为对象初始化
- 对象创建后,内存中就有一个类的实例对象了
由此可见,一个类可以有很多个对象,每个对象都有属于自己的属性、方法;
- 创建出来的 对象 叫做 类的 实例对象
- 创建对象的 行为 叫做 实例化
- 对象的属性 叫做 实例属性
- 对象调用的方法 叫做 实例方法
📝 __init__
初始化方法
1、相关概念
身份:实例的“初始化器”(initializer)。
作用:在对象已创建但尚未可用时,给对象填充属性、完成额外设置。
与
__new__
的关系:__new__
负责“生壳”→ 返回实例;
__init__
负责“装修”→ 给实例贴标签、装属性。
2、语法格式
- 方法名固定为
__init__
。
- 第一参数必须是
self
(名字可改但别改)。
- 不能有返回值,或必须返回
None
。
- 支持所有普通函数能用的形参形式:位置、默认、可变、关键字、类型注解。
self
不是关键字,而是约定俗成的形参名,代表“当前对象本身的引用”。- 定义时必须写在第一个位置;调用时自动传入,不需要手动给。
- 在方法内部,所有实例属性都要通过
self.属性名
访问/修改。
- 同一个类创建的不同对象,
self
指向各自的内存空间,因此数据互不干扰。
3、调用流程(用户只写 1 行,Python 做 3 步)
- 遇到
obj = 类名(args)
- 解释器内部:
- 先执行
类名.__new__(类名, *args)
→ 得到裸实例。 - 若裸实例是该类实例 → 自动调用
裸实例.__init__(*args)
。
- 返回已初始化好的对象。
4、最小可运行示例
5、常见用法扩展
- 带验证
- 调用父类
- dataclass 场景
📝 三大特性:封装、继承、多态
1、总览
特性 | 关键词 | 一句话 | Python 典型语法/机制 |
封装 | Encapsulation | 把数据和操作打包,对外只暴露必要接口 | 私有属性 __x 、属性装饰器 @property |
继承 | Inheritance | 子类复用、扩展父类代码 | class Child(Parent): |
多态 | Polymorphism | 同一接口,不同对象表现出不同行为 | 鸭子类型 + 重写方法 |
2、封装 Encapsulation
2.1、概念
隐藏内部细节,对外提供清晰、可控的接口,防止外部直接篡改数据。
2.2、Python 实现手段
命名约定:
_var
保护变量(提示别乱动)
__var
私有变量(触发名称重整ClassName__
)
属性装饰器:将方法伪装成属性,实现读写校验
只读/只写控制
2.3、代码示例
3、继承 Inheritance
3.1、概念
子类自动获得父类的属性和方法,并可:
- 语法:
class 子类(父类1, 父2, ...):
- 多继承:括号里可放多个父类,按 MRO 顺序查找方法。
- 覆盖/扩展:同名的方法会覆盖父类实现;
super()
显式调用父类版本。
- 内置函数:
issubclass(Child, Parent)
、isinstance(obj, Parent)
用于类型判断。
3.2、语法
3.3、多重继承 & MRO
3.4、使用 super() 调用父类
4、多态 Polymorphism
4.1、概念
“同一接口,多种形态”。调用方只管“会做什么”,不管“具体是谁”。
4.2、Python 鸭子类型
Python 是动态语言,不强制继承体系,只要对象实现了所需方法即可。