目录
第一阶段:基础构建 (The Foundation)
第二阶段:OOP 三大支柱 (The Three Pillars)
第三阶段:工厂与构造技巧 (Creation & Structure)
第四阶段:Pythonic 黑魔法 (Advanced Magic)
👑 终极代码汇总:一个类包含所有知识点
这是一份关于 Python 函数与面向对象编程(OOP)的全景知识梳理。
我们从最初的“定义一个类”,一路进阶到了“让类拥有魔法”。你可以把这看作是你目前的技术技能树。
第一阶段:基础构建 (The Foundation)
核心思想:类是图纸,对象是实物。
| 知识点 | 关键语法/代码 | 核心作用 |
| 类的定义 | class Name: | 定义一个新的数据类型(图纸)。 |
| 占位符 | pass | 保持语法完整,暂时什么都不做。 |
| 初始化 | def __init__(self, ...) | 构造函数。创建对象时自动调用,给属性赋值。 |
| 实例引用 | self | 指代当前正在操作的那个对象(比如“这辆车”)。 |
| 普通方法 | def method(self): | 定义对象的行为(比如“跑”、“跳”)。 |
第二阶段:OOP 三大支柱 (The Three Pillars)
核心思想:代码复用、安全与灵活。
| 知识点 | 关键语法/代码 | 核心作用 |
| 1. 继承 | class Child(Parent): | 复用代码。子类拥有父类的所有能力。 |
| 保留父类功能 | super().__init__(...) | 在子类扩展功能时,不丢掉父类的初始化逻辑。 |
| 2. 封装 | self.__age(双下划线) | 安全。隐藏内部数据,不让外部直接随意修改。 |
| 3. 多态 | 同名方法pay() | 灵活。不同的子类(支付宝/微信)对同一个指令做出不同反应。 |
第三阶段:工厂与构造技巧 (Creation & Structure)
核心思想:让对象的创建更加灵活、通用。
| 知识点 | 关键语法/代码 | 核心作用 |
| 不定长参数 | **kwargs | 接收任意数量的关键字参数,打包成字典。 |
| 安全取值 | kwargs.get("key", default) | 有参数就用参数,没参数就用默认值,防止报错。 |
| 类方法 | @classmethod+cls | 智能模具。cls代表当前类,用于工厂模式,支持继承。 |
| 静态方法 | @staticmethod | 普通工具。不需要self或cls,仅仅是放在类里的普通函数。 |
第四阶段:Pythonic 黑魔法 (Advanced Magic)
核心思想:动态修改、优雅调用、像原生类型一样自然。
| 知识点 | 关键语法/代码 | 核心作用 |
| 类装饰器 | @decorator | 外部修改。不改源码,动态给类增加功能(如打标签、加日志)。 |
| Monkey Patch | Class.method = func | 动态补丁。运行时强行把外部函数塞进类里。 |
| 属性装饰器 | @property | 智能属性。把方法伪装成变量(obj.area),实现计算属性或读写控制。 |
| Setter | @name.setter | 配合@property,在赋值(obj.score=99)时进行数据检查。 |
| 魔法方法 | __str__ | 让print(obj)输出人类能看懂的字符串。 |
| 运算符重载 | __add__/__eq__ | 让自定义对象支持+,-,==等符号运算。 |
👑 终极代码汇总:一个类包含所有知识点
为了让你一眼看懂这些概念是如何融合的,我写了一个集大成的SmartShape案例:
import math # --- 1. 装饰器 (给类动态打标签) --- def add_id(cls): cls.type_id = "SHAPE_001" return cls @add_id class SmartShape: # --- 2. 初始化与私有属性 (封装) --- def __init__(self, size): self._size = size # 内部存储,外部不直接碰 # --- 3. @property (把方法变属性,读写控制) --- @property def size(self): return self._size @size.setter def size(self, value): if value < 0: print("❌ 尺寸不能为负数!") else: self._size = value # --- 4. 普通方法 (需要重写的基类方法) --- def area(self): return 0 # --- 5. 类方法 (工厂模式 + **kwargs) --- @classmethod def create(cls, **kwargs): # cls 自动识别是哪个类在调用 val = kwargs.get("val", 1) return cls(val) # --- 6. 魔法方法 (自我介绍 + 运算) --- def __str__(self): return f"我是 {self.__class__.__name__},尺寸是 {self.size}" def __add__(self, other): # 两个形状相加,返回一个新的形状,尺寸叠加 return self.__class__(self.size + other.size) # --- 7. 继承 (多态) --- class Circle(SmartShape): def area(self): return math.pi * self.size ** 2 class Square(SmartShape): def area(self): return self.size ** 2 # === 测试运行 === # 使用工厂模式创建 c1 = Circle.create(val=10) # cls 变成了 Circle s1 = Square.create(val=5) # cls 变成了 Square # 测试装饰器 print(f"类型ID: {c1.type_id}") # 输出: SHAPE_001 # 测试 @property 和 Setter c1.size = 20 # 正常修改 c1.size = -5 # 输出: ❌ 尺寸不能为负数! # 测试多态 (同样的 .area() 方法,不同的计算公式) print(f"圆面积: {c1.area():.2f}") print(f"方面积: {s1.area()}") # 测试魔法方法 (__str__ 和 __add__) print(c1) # 输出: 我是 Circle,尺寸是 20 c2 = c1 + c1 # 两个圆相加 print(c2) # 输出: 我是 Circle,尺寸是 40