好的,我来帮你系统梳理 **Python 类(class)** 的全部核心知识点,包括语法、属性、方法、继承、特殊方法等,适合作为 **Python 类的完整参考手册**。我会尽量详尽、条理清晰。 --- # Python 类(class)完整知识总结 --- ## 1️⃣ 基础语法 ```python class ClassName(BaseClass): """类的文档字符串""" class_attribute = 0 # 类属性 def __init__(self, arg1, arg2): self.arg1 = arg1 # 实例属性 self.arg2 = arg2 def method(self): print(self.arg1, self.arg2) ``` * `class ClassName:` → 定义类 * `BaseClass` → 可选,继承自父类 * `__init__` → 构造函数(实例化时自动调用) * `self` → 指向实例本身,必须作为实例方法的第一个参数 * **类属性** → 所有实例共享 * **实例属性** → 每个实例独立 --- ## 2️⃣ 实例化和使用 ```python obj = ClassName(10, 20) obj.method() # 调用实例方法 print(obj.arg1) # 访问实例属性 print(ClassName.class_attribute) # 访问类属性 ``` --- ## 3️⃣ 类属性 vs 实例属性 ```python class Example: class_var = 100 # 类属性 def __init__(self, x): self.instance_var = x # 实例属性 e1 = Example(1) e2 = Example(2) print(e1.class_var, e2.class_var) # 100 100 print(e1.instance_var, e2.instance_var) # 1 2 ``` * 修改类属性:`Example.class_var = 200` * 修改实例属性:`e1.instance_var = 10` --- ## 4️⃣ 方法类型 | 方法类型 | 装饰器 | 特点 | | ---- | --------------- | ----------------------- | | 实例方法 | 无或 `@property` | 第一个参数是 `self`,只能通过实例调用 | | 类方法 | `@classmethod` | 第一个参数是 `cls`,可以通过类或实例调用 | | 静态方法 | `@staticmethod` | 无默认参数,可通过类或实例调用 | ```python class Demo: class_var = 0 def instance_method(self): print("实例方法", self.class_var) @classmethod def class_method(cls): print("类方法", cls.class_var) @staticmethod def static_method(): print("静态方法") ``` --- ## 5️⃣ 继承与多态 ```python class Parent: def greet(self): print("Hello from Parent") class Child(Parent): def greet(self): print("Hello from Child") c = Child() c.greet() # 输出 Child 的 greet → 多态 ``` * Python 支持 **单继承** 和 **多继承** * `super()` 调用父类方法: ```python class Child(Parent): def greet(self): super().greet() # 调用父类方法 print("Hello from Child") ``` --- ## 6️⃣ 特殊方法(魔法方法) | 方法 | 功能 | | ----------------------------------- | ------------------- | | `__init__(self, ...)` | 构造函数 | | `__str__(self)` | `print(obj)` 输出 | | `__repr__(self)` | 交互式显示或 `repr(obj)` | | `__len__(self)` | `len(obj)` | | `__getitem__(self, key)` | 支持索引访问 `obj[key]` | | `__setitem__(self, key, value)` | 支持索引赋值 | | `__delitem__(self, key)` | 支持删除 `del obj[key]` | | `__iter__(self)` / `__next__(self)` | 可迭代对象 | | `__eq__`, `__lt__`, `__gt__`, ... | 支持比较运算符 | | `__add__`, `__sub__`, ... | 支持运算符重载 | 示例: ```python 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})" v1 = Vector(1,2) v2 = Vector(3,4) print(v1 + v2) # Vector(4,6) ``` --- ## 7️⃣ 属性访问控制 Python 没有严格私有化,但通过命名约定控制访问: * 公有属性:`self.x` → 可在类外访问 * 受保护属性:`self._x` → 建议类外少用 * 私有属性:`self.__x` → 名字改写,类外不易访问 ```python class Test: def __init__(self): self.public = 1 self._protected = 2 self.__private = 3 t = Test() print(t.public) # 1 print(t._protected) # 2 print(t._Test__private) # 3 → 私有属性访问技巧 ``` --- ## 8️⃣ 属性装饰器(getter/setter) ```python class Person: def __init__(self, name): self._name = name @property def name(self): # getter return self._name @name.setter def name(self, value): # setter self._name = value p = Person("Alice") print(p.name) p.name = "Bob" ``` --- ## 9️⃣ 类方法总结 * `self` → 实例方法,访问实例属性 * `cls` → 类方法,访问类属性 * 静态方法 → 无默认参数,可独立使用 * `@property` → 用方法访问属性,控制读写 --- ## 10️⃣ 进阶概念 * **多继承 & MRO(方法解析顺序)** * Python 按 **C3线性化算法** 决定方法调用顺序 * **组合 vs 继承** * 类可以包含其他类实例,实现复合功能 * **抽象类 & 接口** ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass ``` --- ## 11️⃣ Python 类的总结 1. **定义与实例化** → class + **init** + self 2. **属性** → 类属性 vs 实例属性 3. **方法** → 实例方法 / 类方法 / 静态方法 4. **继承与多态** → super() 调用父类方法 5. **特殊方法** → 魔法方法,实现运算符、索引、迭代等 6. **访问控制** → 公有 / 受保护 / 私有 7. **装饰器** → @property 控制访问 --- 我可以帮你画一张 **Python 类知识全景图**,把 **类结构、属性、方法、继承、魔法方法、访问控制、装饰器** 全部整理成一张图,非常直观易记。 你希望我画吗?