Python--面向对象进阶(下)
4. 特殊成员
方法 | 作用 | 示例 |
---|---|---|
__init__ | 初始化对象 | obj = MyClass() |
__new__ | 创建对象(构造方法) | 返回对象实例 |
__call__ | 使对象可调用 | obj() |
__str__ | 定义对象的字符串表示 | print(obj) |
__getitem__ | 实现索引访问 | obj[key] |
__enter__/__exit__ | 上下文管理(with语句) | with obj as ctx: ... |
示例:上下文管理
class Database:
def __enter__(self):
print("连接数据库")
return self
def __exit__(self, *args):
print("关闭连接")
with Database() as db:
print("执行查询操作")
# 输出:
# 连接数据库
# 执行查询操作
# 关闭连接
5. 迭代器与生成器
5.1 迭代器
- 实现__iter__和__next__
class Counter:
def __init__(self, max_num):
self.current = 0
self.max = max_num
def __iter__(self):
return self
def __next__(self):
if self.current < self.max:
self.current += 1
return self.current
raise StopIteration
for num in Counter(3):
print(num) # 输出1, 2, 3
5.2 生成器
- 使用yield简化迭代器
def counter(max_num):
current = 0
while current < max_num:
current += 1
yield current
for num in counter(3):
print(num) # 输出1, 2, 3
5.3 可迭代对象
- 仅需实现__iter__并返回迭代器
class MyRange:
def __init__(self, max_num):
self.max = max_num
def __iter__(self):
return iter(range(self.max))
for num in MyRange(3):
print(num) # 输出0, 1, 2