This commit is contained in:
e2hang
2025-09-08 21:11:28 +08:00
parent c5100800b0
commit 050e3c5aae
10 changed files with 564 additions and 0 deletions

3
Class/ClassTest/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# 默认忽略的文件
/shelf/
/workspace.xml

8
Class/ClassTest/.idea/ClassTest.iml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.13" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
Class/ClassTest/.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.13" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" />
</project>

8
Class/ClassTest/.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ClassTest.iml" filepath="$PROJECT_DIR$/.idea/ClassTest.iml" />
</modules>
</component>
</project>

6
Class/ClassTest/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

5
Class/ClassTest/main.py Normal file
View File

@@ -0,0 +1,5 @@
import os
class Test:
def __init__(self):

244
Class/readme.md Normal file
View 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 类知识全景图**,把 **类结构、属性、方法、继承、魔法方法、访问控制、装饰器** 全部整理成一张图,非常直观易记。
你希望我画吗?