一、面向对象编程范式
1.1 核心概念解析
在Python中,**类(Class)是创建对象的蓝图,对象(Object)**是类的具体实例。面向对象编程(OOP)通过封装、继承、多态三大特性实现代码的模块化组织。与面向过程编程相比,OOP将数据和行为封装在对象中,更接近现实世界的抽象
示例说明:
class SmartPhone: # 类定义
os = "Android" # 类属性
def __init__(self, model): # 构造方法
self.model = model # 实例属性
def call(self, number): # 实例方法
print(f"正在呼叫 {number}")
pixel = SmartPhone("Pixel 8") # 实例化对象
pixel.call("13800138000") # 方法调用
1.2 对象生命周期管理
- 构造方法
__init__
:对象创建时自动执行,用于初始化实例属性 - 析构方法
__del__
:对象销毁前执行资源清理 - 内存管理:Python采用引用计数和垃圾回收机制自动管理对象生命周期
二、类与对象深度实现
2.1 访问控制机制
通过命名约定实现封装:
- 公有成员:
self.public_var
- 受保护成员:
self._protected_var
- 私有成员:
self.__private_var
(实际存储为_ClassName__var
)
class BankAccount:
def __init__(self):
self.__balance = 0 # 私有属性
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def get_balance(self): # 访问器方法
return self.__balance
2.2 方法类型对比
方法类型 | 装饰器 | 第一个参数 | 访问权限 |
---|---|---|---|
实例方法 | 无 | self | 实例属性/方法 |
类方法 | @classmethod | cls | 类属性/其他类方法 |
静态方法 | @staticmethod | 无 | 不可访问类/实例属性
6 |
class DateTimeUtil:
@classmethod
def from_timestamp(cls, ts):
instance = cls()
instance.timestamp = ts
return instance
@staticmethod
def is_leap_year(year):
return year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)
三、继承与多态机制
3.1 继承体系构建
Python支持多重继承,使用MRO(方法解析顺序)算法确定方法调用顺序
class Animal:
def speak(self):
pass
class Canine(Animal):
def run(self):
print("四足奔跑")
class Dog(Canine):
def speak(self): # 方法重写
print("Woof!")
class Robot:
def charge(self):
print("充电中...")
class RoboDog(Dog, Robot): # 多重继承
def speak(self):
super().speak() # 调用父类方法
print("电子汪汪声")
3.2 多态实现方式
- 鸭子类型:只要对象实现了对应方法,即可视为同一类型
- 抽象基类:通过
abc
模块强制子类实现特定方法
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
四、高级特性解析
4.1 魔术方法
通过实现特殊方法来自定义对象行为:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other): # 运算符重载
return Vector(self.x + other.x, self.y + other.y)
def __str__(self): # 字符串表示
return f"Vector({self.x}, {self.y})"
常用魔术方法:
__new__
:控制实例创建过程__getattr__
:动态属性处理__call__
:使实例可调用
4.2 元类编程
通过继承type
类创建元类,可深度控制类的创建行为:
class Meta(type):
def __new__(cls, name, bases, dct):
dct['created_by'] = 'MetaClass'
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
pass
print(MyClass.created_by) # 输出: MetaClass
五、设计模式实践
5.1 工厂模式
class PaymentMethod:
@classmethod
def create(cls, method_type):
if method_type == "alipay":
return Alipay()
elif method_type == "wechat":
return WechatPay()
raise ValueError("未知支付方式")
5.2 观察者模式
class NewsPublisher:
def __init__(self):
self.__subscribers = []
def register(self, subscriber):
self.__subscribers.append(subscriber)
def notify(self, news):
for sub in self.__subscribers:
sub.update(news)
六、性能优化建议
- 使用
__slots__
减少内存占用 - 避免深度继承层次(建议不超过3层)
- 优先使用组合代替继承
- 利用描述符协议管理属性访问
- 使用弱引用(
weakref
)处理循环引用
class OptimizedObject:
__slots__ = ['attr1', 'attr2'] # 禁用实例字典
def __init__(self, a1, a2):
self.attr1 = a1
self.attr2 = a2