Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Using inner dict as class interface

Reply
Thread Tools

Using inner dict as class interface

 
 
Florian Lindner
Guest
Posts: n/a
 
      01-16-2013
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. So I could do:

c = C()
print c["key"]
print len(c)

but also

c.some_other_method()

How can I achieve that? Do I need to define all methods like
__getitem__, __len__, ... (what else?) to access the inner dict or is
there something more slick?

Thanks,

Florian
 
Reply With Quote
 
 
 
 
Steven D'Aprano
Guest
Posts: n/a
 
      01-16-2013
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()



--
Steven
 
Reply With Quote
 
 
 
 
Peter Otten
Guest
Posts: n/a
 
      01-16-2013
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)]


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Using inner dict as class interface Dave Angel Python 0 01-16-2013 03:05 PM
Re: Using inner dict as class interface Matt Jones Python 0 01-16-2013 02:58 PM
failing to instantiate an inner class because of order of inner classes Pyenos Python 2 12-27-2006 11:19 PM
Nested Class, Member Class, Inner Class, Local Class, Anonymous Class E11 Java 1 10-12-2005 03:34 PM
inner classes in python as inner classes in Java Carlo v. Dango Python 14 10-19-2003 08:49 AM



Advertisments