Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #36909

Re: Using inner dict as class interface

From Peter Otten <__peter__@web.de>
Subject Re: Using inner dict as class interface
Date 2013-01-16 18:34 +0100
Organization None
References <mailman.571.1358347369.2939.python-list@python.org> <50f6bf35$0$30003$c3e8da3$5496439d@news.astraweb.com>
Newsgroups comp.lang.python
Message-ID <mailman.578.1358357701.2939.python-list@python.org> (permalink)

Show all headers | View raw


Steven D'Aprano wrote:

> On Wed, 16 Jan 2013 15:42:42 +0100, Florian Lindner wrote:
> 
>> Hello,
>> 
>> I have a:
>> 
>> class C:
>>    def __init__(self):
>>       d = dict_like_object_created_somewhere_else()
>> 
>>   def some_other_methods(self):
>>     pass
>> 
>> 
>> class C should behave like a it was the dict d.
> 
> Then make it a dict:
> 
> class C(dict):
>     def some_other_methods(self):
>         pass
> 
> my_dict = C(key="value")  # or C({"key": "value"})
> print len(my_dict)
> print my_dict['key']
> my_dict.some_other_methods()

If for some reason it is impractical to follow Steven's advice you can 
subclass collections.Mapping or collections.MutableMapping. That should give 
you a clear notion of the required methods and has defaults for some of 
them.

>>> class A(Mapping): pass
... 
>>> A()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class A with abstract methods 
__getitem__, __iter__, __len__
>>> class B(Mapping):
...     def __getitem__(self, key):
...             return {1:2}[key]
...     def __len__(self): return 1
...     def __iter__(self): yield 1
... 
>>> b = B()
>>> list(b)
[1]
>>> b.items()
[(1, 2)]

Back to comp.lang.python | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Using inner dict as class interface Florian Lindner <mailinglists@xgm.de> - 2013-01-16 15:42 +0100
  Re: Using inner dict as class interface Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-01-16 14:54 +0000
    Re: Using inner dict as class interface Peter Otten <__peter__@web.de> - 2013-01-16 18:34 +0100

csiph-web