一、什么是面向对象编程?
面向对象编程(Object-Oriented Programming,简称 OOP)是一种以对象为中心的编程范式。它强调将数据和操作封装到对象中,从而提高代码的复用性、可扩展性和可维护性。
Python 是一门完全面向对象的语言,所有数据类型都是对象,包括整数、字符串、函数、模块等。
二、Python 中的类与对象
类是对象的蓝图,而对象是类的实例。
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} 正在汪汪叫!")
# 创建对象
dog1 = Dog("旺财")
dog1.bark() # 输出:旺财 正在汪汪叫!
关键词说明:
class
:定义类__init__
:构造函数,初始化对象属性self
:代表实例本身(类似 this)
三、类的属性与方法
类属性(所有对象共享):
class Student:
school = "Python大学" # 类属性
def __init__(self, name):
self.name = name # 实例属性
方法类型
方法类型 | 说明 | 定义方式 |
实例方法 | 操作实例数据 |
|
类方法 | 操作类属性 |
|
静态方法 | 工具方法,与类无关 |
|
四、继承与多态
继承:子类自动拥有父类的属性和方法。
class Animal:
def speak(self):
print("动物发出声音")
class Cat(Animal):
def speak(self):
print("喵喵叫")
cat = Cat()
cat.speak() # 输出:喵喵叫
多态:不同子类的相同方法表现不同。
def make_sound(animal):
animal.speak()
make_sound(Cat()) # 输出:喵喵叫
五、封装与私有属性
封装是指将属性/方法“隐藏”,防止被随意访问。
class BankAccount:
def __init__(self, balance):
self.__balance = balance # 私有属性
def deposit(self, amount):
self.__balance += amount
def show_balance(self):
print(f"余额为:{self.__balance}")
acct = BankAccount(1000)
acct.deposit(500)
acct.show_balance() # 输出:余额为:1500
私有属性前缀为 __
,不可被外部直接访问。
六、特殊方法(魔法方法)
魔法方法是以双下划线开头和结尾的方法,例如:
方法名 | 作用 |
| 构造函数 |
| 打印对象时显示内容 |
| 调试打印显示内容 |
| 对象长度 |
| 对象支持索引 |
| 运算符重载 |
| 对象像函数一样被调用 |
示例:
class Book:
def __init__(self, title):
self.title = title
def __str__(self):
return f"《{self.title}》"
book = Book("Python编程")
print(book) # 输出: 《Python编程》
七、组合:类中嵌套类
组合指的是一个类中使用另一个类作为属性。
class Engine:
def run(self):
print("发动机启动")
class Car:
def __init__(self):
self.engine = Engine()
def start(self):
self.engine.run()
car = Car()
car.start() # 输出:发动机启动
八、类装饰器与元类概念
类装饰器(类也能被修饰):
def log_class(cls):
class Wrapper(cls):
def __init__(self, *args, **kwargs):
print(f"{cls.__name__} 被实例化")
super().__init__(*args, **kwargs)
return Wrapper
@log_class
class User:
def __init__(self, name):
self.name = name
u = User("Alice") # 会打印:User 被实例化
九、项目实战:员工管理系统
class Employee:
raise_rate = 1.05
def __init__(self, name, salary):
self.name = name
self.salary = salary
def apply_raise(self):
self.salary = int(self.salary * self.raise_rate)
class Manager(Employee):
def __init__(self, name, salary, department):
super().__init__(name, salary)
self.department = department
def show_info(self):
print(f"{self.name} 管理 {self.department} 部门,工资 {self.salary} 元")
m1 = Manager("李雷", 12000, "技术")
m1.apply_raise()
m1.show_info() # 李雷 管理 技术 部门,工资 12600 元
十、类与模块的组织方式
建议将类分文件存放,结构清晰易维护:
project/
├── main.py
├── models/
│ ├── employee.py
│ ├── manager.py
引用方式:
from models.employee import Employee
from models.manager import Manager
十一、类的类型检查与 isinstance
e = Employee("Tom", 8000)
print(isinstance(e, Employee)) # True
print(isinstance(e, object)) # True
所有类都是 object
的子类。
十二、为什么使用面向对象编程?
优势 | 描述 |
高度抽象 | 抽象出人/车/用户等实体 |
代码复用 | 父类方法子类直接使用 |
易维护 | 类中局部封装 |
扩展方便 | 新需求继承或组合即可 |
模拟现实 | 接近人类认知方式 |
十三、常见 OOP 模式(可拓展学习)
模式 | 应用场景 |
工厂模式 | 统一创建对象 |
单例模式 | 系统全局唯一对象 |
策略模式 | 多种算法切换 |
观察者模式 | 数据变化通知其他模块 |
装饰器模式 | 动态添加功能 |
Python 支持用函数/类实现这些经典设计模式。
十四、Python OOP 学习建议
- 从类、对象、方法入手;
- 理解继承和组合的差异;
- 多写实际项目类封装(如:图书馆系统、客户管理系统等);
- 理解魔法方法提升代码高级性;
- 结合设计模式思考扩展性与灵活性。
十五、练习题推荐
- 编写一个
Book
类,包含书名、作者、价格,支持折扣方法; - 用继承设计一个
Animal
和Dog
类; - 编写一个
Bank
类,支持转账和余额查询; - 设计一个
UserManager
类,实现用户注册与登录验证; - 设计一个
Shape
抽象类,子类包括Circle
,Rectangle
等,重写area()
方法。
十六、结语
掌握面向对象编程是走向高级开发者的必经之路。Python 以其简洁优雅的语法,让 OOP 的学习变得更加友好。在今后的 Web 开发、游戏开发、自动化系统、数据建模等方向中,类和对象都将成为你手中的强大工具。