一、什么是面向对象编程?
面向对象编程(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 开发、游戏开发、自动化系统、数据建模等方向中,类和对象都将成为你手中的强大工具。










