Python面向对象编程深度解析2026版:从类与对象到设计模式完整教程
前言面向对象编程OOP是Python的核心编程范式。本文从类与对象基础出发深入解析继承、多态、封装和设计模式。## 一、类与对象### 1.1 基本概念pythonclass Dog: # 类变量 species Canis familiaris def __init__(self, name, age): # 实例变量 self.name name self.age age # 实例方法 def bark(self): return f{self.name} says Woof! # 类方法 classmethod def from_string(cls, data_str): name, age data_str.split(,) return cls(name, int(age)) # 静态方法 staticmethod def is_valid_age(age): return age 0 and age 30# 创建对象dog Dog(Buddy, 3)print(dog.bark()) # Buddy says Woof!### 1.2 魔术方法pythonclass Vector: def __init__(self, x, y): self.x x self.y y def __repr__(self): return fVector({self.x}, {self.y}) def __add__(self, other): return Vector(self.x other.x, self.y other.y) def __eq__(self, other): return self.x other.x and self.y other.y def __len__(self): return int((self.x**2 self.y**2)**0.5)v1 Vector(3, 4)v2 Vector(1, 2)print(v1 v2) # Vector(4, 6)print(len(v1)) # 5## 二、封装### 2.1 属性访问控制pythonclass BankAccount: def __init__(self, balance0): self._balance balance # 受保护 self.__transactions [] # 私有 property def balance(self): return self._balance balance.setter def balance(self, value): if value 0: raise ValueError(Balance cannot be negative) self._balance value def deposit(self, amount): if amount 0: raise ValueError(Amount must be positive) self._balance amount self.__transactions.append((deposit, amount))account BankAccount(100)account.deposit(50)print(account.balance) # 150## 三、继承与多态### 3.1 继承pythonclass Animal: def __init__(self, name): self.name name def speak(self): raise NotImplementedErrorclass Dog(Animal): def speak(self): return f{self.name} says Woof!class Cat(Animal): def speak(self): return f{self.name} says Meow!# 多态animals [Dog(Buddy), Cat(Whiskers)]for animal in animals: print(animal.speak())### 3.2 多重继承与MROpythonclass Swimmer: def swim(self): return Swimmingclass Flyer: def fly(self): return Flyingclass Duck(Swimmer, Flyer): passduck Duck()print(duck.swim()) # Swimmingprint(duck.fly()) # Flyingprint(Duck.__mro__) # 方法解析顺序## 四、设计模式### 4.1 单例模式pythonclass Singleton: _instance None def __new__(cls): if cls._instance is None: cls._instance super().__new__(cls) return cls._instances1 Singleton()s2 Singleton()print(s1 is s2) # True### 4.2 工厂模式pythonclass AnimalFactory: staticmethod def create(animal_type, name): if animal_type dog: return Dog(name) elif animal_type cat: return Cat(name) raise ValueError(fUnknown animal: {animal_type})animal AnimalFactory.create(dog, Buddy)### 4.3 观察者模式pythonclass Subject: def __init__(self): self._observers [] def attach(self, observer): self._observers.append(observer) def notify(self, data): for observer in self._observers: observer.update(data)class Observer: def update(self, data): print(fReceived: {data})## 五、SOLID原则| 原则 | 含义 | 示例 ||—|—|—|| S - 单一职责 | 一个类只负责一件事 | User类不处理数据库连接 || O - 开闭原则 | 对扩展开放对修改关闭 | 用继承扩展功能 || L - 里氏替换 | 子类可以替换父类 | Cat可以替代Animal || I - 接口隔离 | 掆面接口而非胖接口 | 分离Swimmer和Flyer || D - 依赖倒置 | 依赖抽象不依赖具体 | 依赖ABC而非实现类 |—## 六、Python现代OOP特性Python 3.7引入了多项现代化OOP特性显著提升了类定义的简洁性和类型安全性。### 6.1 dataclass装饰器dataclass自动生成__init__、repr、__eq__等方法大幅减少样板代码。特别适合定义数据容器类。支持默认值、类型注解、不可变实例frozenTrue和字段自定义。相比传统类定义dataclass让代码更聚焦于业务字段而非基础设施方法。### 6.2 类型注解与运行时检查Python的类型注解系统typing模块虽然不强制运行时检查但配合mypy等静态检查工具可以在开发阶段捕获类型错误。Protocol类实现了结构化子类型鸭子类型的静态版本Protocol不需要显式继承就能满足接口约束这在设计松耦合系统时非常实用。### 6.3 __slots__优化内存默认情况下Python对象用__dict__存储属性内存开销大。定义__slots__后对象改用固定大小的数组存储属性内存占用可减少40%-50%。在创建大量对象的场景下如解析百万级数据行__slots__是关键的内存优化手段。代价是不能再动态添加新属性。Python OOP的核心是合理使用类、继承和多态来组织代码。掌握设计模式和SOLID原则可以写出更可维护的代码。