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)] -- http://mail.python.org/mailman/listinfo/python-list