Python面向对象编程全攻略:从基础到进阶
一、面向对象核心思想
1.1 面向对象 vs 面向过程
- 面向过程:关注"如何一步步解决问题"(亲力亲为)
- 示例:小明亲自完成"买配件-运输-组装"全流程
- 面向对象:关注"委托实体解决问题"(分工协作)
- 示例:小明委托老王完成整个电脑组装流程
- 语言特性:Python/C#/Java等支持OO,C语言偏向过程式
1.2 类与对象的本质
- 类:具有相同特征和行为的对象集合(Dog类定义所有狗的共性)
- 对象:类的具体实例(每只狗都是Dog类的对象)
- 关系:类是模板(Dog),对象是实例(哮天犬/大黄)
二、类设计与对象管理
2.1 构造方法与魔术方法
class Dog:
def __init__(self, name, color): # 初始化方法
self.name = name
self.color = color
def __str__(self): # 字符串表示
return f"{self.color}的{self.name}"
2.2 常用魔术方法速查表
| 方法名 | 触发时机 | 典型应用 |
|---|---|---|
__init__ | 对象初始化 | 属性赋值 |
__del__ | 对象销毁 | 资源释放 |
__add__ | +运算 | 自定义加法逻辑 |
__eq__ | ==比较 | 内容比较替代地址 |
__str__ | str()/print() | 可读字符串格式 |
三、面向对象三大支柱
3.1 封装:数据保护机制
- 访问控制:
class Person: def __init__(self, age): self.__age = age # 私有属性 @property def age(self): # 安全访问器 return self.__age @age.setter def age(self, value): if 0 <= value <= 150: self.__age = value
3.2 继承:代码复用利器
- 继承关系:
class Animal: def speak(self): print("动物叫声") class Dog(Animal): # 单继承 def speak(self): # 方法重写 print("汪汪汪") class FlyingDog(Dog, Bird): # 多继承 pass
3.3 多态:接口统一性
def make_sound(animal):
animal.speak()
dog = Dog()
cat = Cat()
make_sound(dog) # 输出汪汪汪
make_sound(cat) # 输出喵喵喵
四、高级特性解析
4.1 类属性与类方法
class Student:
count = 0 # 类属性
@classmethod
def get_total(cls):
return cls.count
s1 = Student()
s2 = Student()
Student.count = 100 # 通过类修改
print(s1.count) # 输出100
4.2 静态方法与工具类
class MathUtils:
@staticmethod
def add(a, b):
return a + b
result = MathUtils.add(3, 5) # 不需要实例化
4.3 异常处理机制
-
异常处理结构:
try: num = int(input("输入数字:")) except ValueError: print("请输入有效数字!") else: print(f"成功获取数字:{num}") finally: print("程序结束") -
自定义异常:
class AgeError(Exception): pass def set_age(age): if not (0 <= age <= 150): raise AgeError("年龄范围错误")
五、性能优化技巧
5.1 __slots__内存优化
class Point:
__slots__ = ['x', 'y'] # 限制属性,节省内存
def __init__(self, x, y):
self.x = x
self.y = y
5.2 动态绑定特性
p = Point(1, 2)
p.z = 3 # 动态添加属性(仅当前实例有效)
结语:面向对象设计原则
- 高内聚低耦合:类内部高度相关,类间依赖最小化
- 开闭原则:对扩展开放,对修改关闭
- 里氏替换:子类应能替换父类而不影响功能
- 接口隔离:设计细粒度的接口,避免臃肿
实践建议:从简单类设计开始,逐步引入继承和多态。通过封装保护数据,利用类方法管理共享状态,善用异常处理提升程序健壮性。
2万+

被折叠的 条评论
为什么被折叠?



