好的,我来帮你系统梳理 Python 类(class) 的全部核心知识点,包括语法、属性、方法、继承、特殊方法等,适合作为 Python 类的完整参考手册。我会尽量详尽、条理清晰。
Python 类(class)完整知识总结
1️⃣ 基础语法
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️⃣ 实例化和使用
obj = ClassName(10, 20)
obj.method() # 调用实例方法
print(obj.arg1) # 访问实例属性
print(ClassName.class_attribute) # 访问类属性
3️⃣ 类属性 vs 实例属性
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 |
无默认参数,可通过类或实例调用 |
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️⃣ 继承与多态
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()
调用父类方法:
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__ , ... |
支持运算符重载 |
示例:
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
→ 名字改写,类外不易访问
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)
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 继承
- 类可以包含其他类实例,实现复合功能
-
抽象类 & 接口
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
11️⃣ Python 类的总结
- 定义与实例化 → class + init + self
- 属性 → 类属性 vs 实例属性
- 方法 → 实例方法 / 类方法 / 静态方法
- 继承与多态 → super() 调用父类方法
- 特殊方法 → 魔法方法,实现运算符、索引、迭代等
- 访问控制 → 公有 / 受保护 / 私有
- 装饰器 → @property 控制访问
我可以帮你画一张 Python 类知识全景图,把 类结构、属性、方法、继承、魔法方法、访问控制、装饰器 全部整理成一张图,非常直观易记。
你希望我画吗?