Files
python/Class/readme.md
2025-09-08 21:11:28 +08:00

245 lines
5.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

好的,我来帮你系统梳理 **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 类知识全景图**,把 **类结构、属性、方法、继承、魔法方法、访问控制、装饰器** 全部整理成一张图,非常直观易记。
你希望我画吗?