一、引言:为什么需要"面向对象"?
当我们的代码越来越复杂、功能越来越多时,单纯依靠函数和变量会让程序结构变得混乱,难以维护。 此时,面向对象编程(OOP,Object-Oriented Programming) 提供了一种更清晰、更可扩展的组织方式。
它的核心思想是:
把现实世界的事物抽象成程序中的"对象",对象包含了数据(属性)和行为(方法)。
比如,我们要描述一辆汽车:
- 它有颜色、品牌、速度(这些是"属性");
- 它能启动、加速、刹车(这些是"行为")。
在面向对象的世界中,我们用**类(class)定义这种"模板",再用对象(object)**来创建实际的实例。
二、类(Class)与对象(Object)的关系
1. 类是什么?
类就像是一个模板或图纸,用来描述某一类事物的共同特征和行为。
举例:
- 类:汽车(Car)
- 属性:品牌、颜色、速度
- 方法:启动、加速、刹车
2. 对象是什么?
对象是根据类创建出来的具体实例。 类是"抽象的",对象是"具体的"。
类 → 定义蓝图 对象 → 按照蓝图造出来的东西
类与对象关系如图:
ini
Class(类) → Object(对象)
Car → my_car = Car()
三、定义一个类
Python 使用 class 关键字定义类。
python
class Car:
brand = "未定义"
color = "未定义"
def start(self):
print(f"{self.brand} 汽车启动!")
这里:
brand、color是类的属性;start()是类的方法。
四、创建对象(实例化)
通过类名加括号即可创建对象。
python
my_car = Car()
此时,my_car 就是 Car 类的一个对象。
我们可以访问属性或调用方法:
python
my_car.brand = "Tesla"
my_car.color = "红色"
print(my_car.brand) # 输出 Tesla
my_car.start() # 输出 Tesla 汽车启动!
五、__init__() 构造方法
在创建对象时,我们通常希望能够自动初始化对象的属性 。 这就需要用到 __init__() 方法(构造函数)。
python
class Car:
def __init__(self, brand, color):
self.brand = brand # 对象属性
self.color = color
def start(self):
print(f"{self.color} 的 {self.brand} 汽车启动了!")
创建对象时,传入参数:
python
my_car = Car("Tesla", "红色")
my_car.start()
输出:
红色 的 Tesla 汽车启动了!
📘 说明:
__init__在创建对象时自动执行;self表示对象自身;- 每个对象都有自己独立的属性。
六、类属性与实例属性
1. 类属性(所有对象共享)
python
class Dog:
species = "犬科" # 类属性
def __init__(self, name):
self.name = name # 实例属性
访问方式:
python
d1 = Dog("旺财")
d2 = Dog("小黑")
print(d1.species, d2.species) # 犬科 犬科
print(d1.name, d2.name) # 旺财 小黑
类属性是所有实例共享的,而实例属性是每个对象独有的。
七、方法的分类
| 方法类型 | 定义方式 | 特点 |
|---|---|---|
| 实例方法 | def func(self) |
操作实例数据,是最常用的 |
| 类方法 | @classmethod def func(cls) |
操作类属性,cls 表示类本身 |
| 静态方法 | @staticmethod def func() |
与类无关的通用函数 |
示例:
python
class MathTool:
PI = 3.14159
def area_circle(self, r):
return MathTool.PI * r * r
@classmethod
def show_pi(cls):
print("圆周率为:", cls.PI)
@staticmethod
def add(a, b):
return a + b
八、对象的行为与状态
一个对象包含:
- 属性(状态):描述对象的特征;
- 方法(行为):描述对象能做什么。
以一个"学生"类为例:
python
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def study(self, subject):
print(f"{self.name} 正在学习 {subject}")
stu = Student("小明", 18)
stu.study("Python")
输出:
小明 正在学习 Python
九、理解 self
self 代表当前对象的引用 。 当你在对象中访问自己的属性或方法时,必须通过 self。
比如:
python
class Person:
def __init__(self, name):
self.name = name # self.name 是实例属性
def say_hello(self):
print(f"你好,我是 {self.name}")
创建多个对象时:
python
p1 = Person("张三")
p2 = Person("李四")
p1.say_hello() # 你好,我是 张三
p2.say_hello() # 你好,我是 李四
每个对象都有自己的独立数据。
十、实践练习
-
定义一个类
Book,包含:-
属性:
title、author、price -
方法:
show_info()输出书籍信息 示例输出:《Python编程实战》 作者:李雷,价格:88元
-
-
定义一个类
Account,包含:- 属性:用户名、余额
- 方法:
deposit()、withdraw()、check_balance()模拟一个简单的银行账户操作。
十一、小结
| 概念 | 说明 |
|---|---|
| 类(Class) | 模板,定义对象的属性和行为 |
| 对象(Object) | 类的实例,是具体的存在 |
__init__() |
构造方法,用于初始化对象 |
self |
表示对象自身 |
| 类属性 | 所有对象共享的属性 |
| 实例属性 | 每个对象独立的属性 |
| 方法类型 | 实例方法 / 类方法 / 静态方法 |
十二、总结一句话
类是图纸,对象是房子。 用类设计结构,用对象去创造世界。