Altered
This commit is contained in:
244
Class/readme.md
Normal file
244
Class/readme.md
Normal file
@@ -0,0 +1,244 @@
|
||||
好的,我来帮你系统梳理 **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 类知识全景图**,把 **类结构、属性、方法、继承、魔法方法、访问控制、装饰器** 全部整理成一张图,非常直观易记。
|
||||
|
||||
你希望我画吗?
|
Reference in New Issue
Block a user