如果实现python字典的只读, 考虑字典内容有list, dict的嵌套问题

下面代码并没有实现, 预留后续继续研究:

1. 完全模拟字典行为

2. 只读

3. 特别的在遍历,嵌套上面需考虑

class _CfgData(object):
    """配置数据,主要为了实现类似JSON格式数据的ReadOnly
    """

    def __init__(self, data):
        self._data = data

    def __getitem__(self, i):
        return self.deco_data(self._data[i])

    def get(self, *args):
        if len(args) == 2:
            if args[0] not in self._data:
                return args[1]
        name = args[0]
        return self.deco_data(self._data[name])
<pre name="code" class="python">    def __getattr__(self, key):
        """proxy
        :param key:
        :return:
        """
        return getattr(self._data, key)

def deepcopy(self): return copy.deepcopy(self._data) def __len__(self): return len(self._data) @classmethod def deco_data(cls, data): """修饰数据,如果是最基本的几个类型就不用修饰直接返回 """ if data is None or isinstance(data, (str, int, float, unicode, bool)): return data return cls(data)
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值