类与对象
原文:类与对象
一句话
Python面向对象编程基础,教你如何创建自定义数据结构和行为。
什么时候翻这页
- 当你需要为Agent设计自定义工具类时
- 当你需要实现Agent的状态管理机制时
- 当你需要理解Python迭代器协议,为Agent创建可迭代数据源时
- 当你需要构建具有层次结构的Agent组件时
核心概念
- 类与对象:类是创建对象的蓝图,对象是类的实例,包含数据属性和方法
- 命名空间:从名称到对象的映射,如内置名称、模块全局名称、函数局部名称
- 作用域:Python代码中可直接访问命名空间的文本区域,分为局部、闭包、全局和内置作用域
- 实例变量:属于特定实例的数据,每个实例独立
- 类变量:属于类本身的数据,所有实例共享
- 继承:创建新类时获取已有类的属性和方法,支持多重继承
- 迭代器:实现了
__iter__()和__next__()方法的对象,用于遍历数据 - 生成器:使用
yield语句的函数,自动创建迭代器并保存执行状态
怎么做
- 定义类:
class MyClass:
"""一个简单的示例类"""
i = 12345 # 类变量
def __init__(self, value): # 初始化方法
self.data = [value] # 实例变量
def f(self): # 实例方法
return 'hello world'
- 创建实例:
x = MyClass(42) # 创建实例
print(x.i) # 访问类变量: 12345
print(x.data) # 访问实例变量: [42]
print(x.f()) # 调用方法: 'hello world'
- 使用继承:
class DerivedClass(MyClass):
def __init__(self, value, extra):
super().__init__(value) # 调用父类初始化
self.extra = extra # 添加新属性
def f(self): # 重写父类方法
return f'hello {self.extra}'
- 创建迭代器:
class Reverse:
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.data[self.index]
- 使用生成器:
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index] # 生成值而不是返回
for char in reverse('golf'):
print(char) # 输出: f, l, o, g
命令 / API 速查
| 语法/函数 | 描述 |
|---|---|
class ClassName: | 定义类 |
__init__(self, ...) | 初始化方法 |
self | 实例引用,方法第一个参数 |
iter(obj) | 获取对象的迭代器 |
next(iterator) | 获取迭代器的下一个元素 |
yield value | 生成值,创建生成器函数 |
isinstance(obj, class) | 检查对象是否是指定类的实例 |
issubclass(class1, class2) | 检查类是否是另一个类的子类 |
@dataclass | 装饰器,自动生成数据类方法 |
与 Agent 开发的联系
- 类和对象可用于实现Agent的核心组件,如记忆系统、决策模块和工具封装
- 迭代器和生成器可用于处理Agent需要处理的大量数据流,实现高效的数据处理
- 继承机制可用于构建Agent的层次化架构,使Agent能够扩展和定制基础功能
- 私有变量可用于封装Agent的内部状态,保护数据完整性并提供清晰的API边界
初学者易错点
- 混淆实例变量和类变量,导致意外共享状态
- 忘记在方法定义中包含
self参数,导致方法调用失败 - 错误地使用全局变量而非实例变量,破坏面向对象封装原则
- 不理解迭代器协议就尝试实现自定义迭代器,导致循环异常
- 在多重继承中不清楚方法解析顺序,导致意外的方法调用
相关词条
tutorial-inheritance继承与多态tutorial-dataclasses数据类tutorial-iterators迭代器与生成器tutorial-oop面向对象编程tutorial-modules模块与包tutorial-exceptions异常处理