zoukankan      html  css  js  c++  java
  • AutoDict与AutoOrderedDict

    class DotDict(dict):
        # If the attribut is not found in the usual places try the dict itself
        def __getattr__(self, key):
            if key.startswith('__'):
                return super(DotDict, self).__getattr__(key)
            return self[key]
    
    
    class AutoDict(dict):
        _closed = False
    
        def _close(self):
            self._closed = True
            for key, val in self.items():
                if isinstance(val, (AutoDict, AutoOrderedDict)):
                    val._close()
    
        def _open(self):
            self._closed = False
    
        def __missing__(self, key):
            if self._closed:
                raise KeyError
    
            value = self[key] = AutoDict()
            return value
    
        def __getattr__(self, key):
            if False and key.startswith('_'):
                raise AttributeError
    
            return self[key]
    
        def __setattr__(self, key, value):
            if False and key.startswith('_'):
                self.__dict__[key] = value
                return
    
            self[key] = value
    
    
    class AutoOrderedDict(OrderedDict):
        _closed = False
    
        def _close(self):
            self._closed = True
            for key, val in self.items():
                if isinstance(val, (AutoDict, AutoOrderedDict)):
                    val._close()
    
        def _open(self):
            self._closed = False
    
        def __missing__(self, key):
            if self._closed:
                raise KeyError
    
            # value = self[key] = type(self)()
            value = self[key] = AutoOrderedDict()
            return value
    
        def __getattr__(self, key):
            if key.startswith('_'):
                raise AttributeError
    
            return self[key]
    
        def __setattr__(self, key, value):
            if key.startswith('_'):
                self.__dict__[key] = value
                return
    
            self[key] = value
    
        # Define math operations
        def __iadd__(self, other):
            if type(self) != type(other):
                return type(other)() + other
    
            return self + other
    
        def __isub__(self, other):
            if type(self) != type(other):
                return type(other)() - other
    
            return self - other
    
        def __imul__(self, other):
            if type(self) != type(other):
                return type(other)() * other
    
            return self + other
    
        def __idiv__(self, other):
            if type(self) != type(other):
                return type(other)() // other
    
            return self + other
    
        def __itruediv__(self, other):
            if type(self) != type(other):
                return type(other)() / other
    
            return self + other
    
        def lvalues(self):
            return py3lvalues(self)
    

      

  • 相关阅读:
    网络爬虫之Cookies解决
    高性能异步爬虫
    Python csv存储
    pandas ExcelWriter用法及代码示例
    pandas to_excel 用法详解
    pandas read_csv 与 to_csv 方法各参数详解
    pandas read_excel操作
    pandas DataFrame.groupby()所见的各种用法详解
    Pandas 中 DataFrame 基本函数整理
    Python 解析二维码 输出文本
  • 原文地址:https://www.cnblogs.com/sidianok/p/13920189.html
Copyright © 2011-2022 走看看