一、面向对象的核心思想
面向对象编程的核心是以 “对象” 为中心组织代码,把现实世界中的事物抽象为程序中的 “对象”,每个对象包含:
- 属性:描述事物的特征(如人的姓名、年龄,手机的品牌、价格);
- 方法:事物能执行的行为(如人走路、说话,手机打电话、发短信)。
对比面向过程编程(按步骤写代码),面向对象更贴合人类对现实世界的认知,代码复用性、可维护性更高。
二、核心基础概念
1. 类(Class)—— 对象的 “模板”
类是对一类事物的抽象定义,相当于创建对象的 “模板” 或 “蓝图”,定义了这类事物共有的属性和方法。
- 比如:“手机” 类,定义了所有手机都有的属性(品牌、价格)和方法(打电话、发短信);
- 语法:用
class 类名:定义,类名遵循 “大驼峰命名法”(如Phone、Person)。
2. 对象(Object/Instance)—— 类的 “实例”
对象是类的具体实例,是根据类模板创建的 “具体事物”。
- 比如:“华为 Mate60” 是 “手机” 类的一个对象,“苹果 iPhone15” 是另一个对象;
- 一个类可以创建无数个对象,每个对象有自己的属性值,但共享类的方法。
3. 属性(Attribute)—— 对象的 “特征”
属性是对象的静态特征,分为两类:
- 类属性:属于类本身,所有对象共享(如所有手机都属于 “电子产品” 这个类别);
- 实例属性:属于单个对象,每个对象的属性值可不同(如手机的价格、颜色)。
4. 方法(Method)—— 对象的 “行为”
方法是对象的动态行为,本质是定义在类中的函数,分为三类:
- 实例方法:最常用,第一个参数必须是
self(代表当前对象),通过对象调用; - 类方法:第一个参数是
cls(代表当前类),用@classmethod装饰,通过类 / 对象调用; - 静态方法:无默认参数,用
@staticmethod装饰,与类 / 对象无关,仅作为类的 “工具函数”。
三、核心概念的代码实现
1. 类与对象的基础用法
python
# 1. 定义类(模板) class Phone: # 类属性:所有对象共享 category = "电子产品" # 初始化方法:创建对象时自动执行,用于定义实例属性 def __init__(self, brand, price, color): # 实例属性:每个对象独有 self.brand = brand # 品牌 self.price = price # 价格 self.color = color # 颜色 # 实例方法:对象的行为,self代表当前对象 def call(self): print(f"{self.brand}手机({self.color})正在拨打电话") # 类方法:操作类属性,cls代表当前类 @classmethod def change_category(cls, new_category): cls.category = new_category print(f"类属性已修改:{cls.category}") # 静态方法:工具函数,与类/对象无关 @staticmethod def calculate_discount(price, discount): return price * discount # 2. 创建对象(实例化) phone1 = Phone("华为", 5999, "黑色") # 第一个对象 phone2 = Phone("苹果", 7999, "白色") # 第二个对象 # 3. 访问属性和方法 # 访问实例属性 print(phone1.brand) # 输出:华为 print(phone2.price) # 输出:7999 # 访问类属性(类/对象均可调用) print(Phone.category) # 输出:电子产品 print(phone1.category) # 输出:电子产品 # 调用实例方法 phone1.call() # 输出:华为手机(黑色)正在拨打电话 phone2.call() # 输出:苹果手机(白色)正在拨打电话 # 调用类方法 Phone.change_category("智能设备") # 输出:类属性已修改:智能设备 print(phone2.category) # 输出:智能设备(所有对象共享修改后的类属性) # 调用静态方法 discount_price = Phone.calculate_discount(5999, 0.8) print(f"折扣价:{discount_price}") # 输出:折扣价:4799.22. 关键概念解析
__init__方法:称为 “构造方法 / 初始化方法”,创建对象时自动执行,用于给对象初始化实例属性;self:不是关键字,只是约定俗成的参数名,代表当前对象本身,调用实例方法时 Python 会自动传入;- 实例化:创建对象的过程,语法是
对象名 = 类名(参数),参数对应__init__方法的参数(除 self 外); - 类属性 vs 实例属性:
- 类属性存在于类的命名空间中,所有对象共享,修改类属性会影响所有对象;
- 实例属性存在于每个对象的命名空间中,修改一个对象的实例属性不影响其他对象。
四、面向对象的核心原则(补充)
理解基本概念后,需了解 OOP 的核心设计原则,为后续学习三大特性打基础:
- 抽象:把现实事物的核心特征提取出来定义为类(比如手机只关注品牌、价格、打电话,忽略重量、尺寸等非核心特征);
- 封装:后续会详细讲,核心是把属性和方法绑定在类中,隐藏内部细节;
- 复用:通过类和对象,避免重复编写相同代码(比如多个手机对象共享
call方法)。
五、常见误区
- 混淆类和对象:类是模板(抽象),对象是具体实例(比如 “手机” 是类,“我的华为手机” 是对象);
- 忘记
self参数:实例方法必须带self,否则调用时会报错; - 类属性和实例属性混用:如需每个对象有独立的属性值,用实例属性;如需所有对象共享,用类属性。
总结
- 类是对象的模板,定义了一类事物的共有属性和方法;对象是类的具体实例,有自己的属性值;
- 属性分类属性(共享)和实例属性(独有),方法分实例方法(self)、类方法(cls)、静态方法(无默认参数);
__init__是初始化方法,创建对象时自动执行,用于初始化实例属性;self代表当前对象,是实例方法的必选参数。
这些基本概念是学习 Python 面向对象编程的基石,掌握后可进一步学习封装、继承、多态三大核心特性。