让类像字典一样工作
让类像字典一样工作

让类像字典一样工作

SettingsManager 类定义了一个 attributes 字典来存储设置,但是 getitemsetitemdelitem 方法都是空的,这意味着它们没有实现任何功能。为了让这个类能够像字典一样工作(即可以使用 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 字典了。

发表回复

您的电子邮箱地址不会被公开。