A python class that acts like dict

前端 未结 9 2079

I want to write a custom class that behaves like dict - so, I am inheriting from dict.

My question, though, is: Do I need to create a priva

9条回答
  •  囚心锁ツ
    2020-11-30 18:40

    class Mapping(dict):
    
        def __setitem__(self, key, item):
            self.__dict__[key] = item
    
        def __getitem__(self, key):
            return self.__dict__[key]
    
        def __repr__(self):
            return repr(self.__dict__)
    
        def __len__(self):
            return len(self.__dict__)
    
        def __delitem__(self, key):
            del self.__dict__[key]
    
        def clear(self):
            return self.__dict__.clear()
    
        def copy(self):
            return self.__dict__.copy()
    
        def has_key(self, k):
            return k in self.__dict__
    
        def update(self, *args, **kwargs):
            return self.__dict__.update(*args, **kwargs)
    
        def keys(self):
            return self.__dict__.keys()
    
        def values(self):
            return self.__dict__.values()
    
        def items(self):
            return self.__dict__.items()
    
        def pop(self, *args):
            return self.__dict__.pop(*args)
    
        def __cmp__(self, dict_):
            return self.__cmp__(self.__dict__, dict_)
    
        def __contains__(self, item):
            return item in self.__dict__
    
        def __iter__(self):
            return iter(self.__dict__)
    
        def __unicode__(self):
            return unicode(repr(self.__dict__))
    
    
    o = Mapping()
    o.foo = "bar"
    o['lumberjack'] = 'foo'
    o.update({'a': 'b'}, c=44)
    print 'lumberjack' in o
    print o
    
    In [187]: run mapping.py
    True
    {'a': 'b', 'lumberjack': 'foo', 'foo': 'bar', 'c': 44}
    

提交回复
热议问题