SettingsManager 类定义了一个 attributes 字典来存储设置,但是 getitem、setitem 和 delitem 方法都是空的,这意味着它们没有实现任何功能。为了让这个类能够像字典一样工作(即可以使用 settings_manager['key'] 的方式来获取和设置值),我们需要为这些特殊方法提供实现。
下面是这些方法的简单实现,它们允许您通过键来获取、设置和删除 attributes 字典中的值:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time : 2024-04-23 18:48
@Author : lxc
@File : setting_manager.py
@Desc :
"""
class SettingsManager:
def __init__(self):
self.attributes = {
'PROJECT_NAME': "baidu_spider",
'CONCURRENCY': 16
}
def __getitem__(self, item):
"""通过键获取值"""
return self.attributes[item]
def __setitem__(self, key, value):
"""通过键设置值"""
self.attributes[key] = value
def __delitem__(self, key):
"""通过键删除值"""
del self.attributes[key]
# 使用示例
settings_manager = SettingsManager()
# 获取值
print(settings_manager['PROJECT_NAME']) # 输出: baidu_spider
# 设置值
settings_manager['CONCURRENCY'] = 32
print(settings_manager['CONCURRENCY']) # 输出: 32
# 删除值
del settings_manager['CONCURRENCY']
# print(settings_manager['CONCURRENCY']) # 这会抛出 KeyError,因为 CONCURRENCY 已经被删除
在这个实现中:
__getitem__ 方法接收一个键(item),并返回 attributes 字典中对应的值。如果键不存在,它将引发 KeyError。
__setitem__ 方法接收一个键(key)和一个值(value),并将该键值对添加到 attributes 字典中。如果键已经存在,则更新其对应的值。
__delitem__ 方法接收一个键(key),并从 attributes 字典中删除对应的键值对。如果键不存在,它将引发 KeyError。
现在,SettingsManager 类就可以像使用字典一样来操作其内部的 attributes 字典了。