How to make python class support item assignment?
They are accomplishing this magic by inheriting from dict
. A better way of doing this is to inherit from UserDict or the newer collections.MutableMapping
You could accomplish a similar result by doing the same:
import collectionsclass ObjectChild(collections.MutableMapping): def __init__(self, name): self['name'] = name
You can also define two special functions to make your class dictionary-like: __getitem__(self, key)
and __setitem__(self, key, value)
. You can see an example of this at Dive Into Python - Special Class Methods.
In Python 3 and later, just add these simple functions to your class:
class some_class(object): def __setitem__(self, key, value): setattr(self, key, value) def __getitem__(self, key): return getattr(self, key)
Disclaimer : I might be wrong.
the notation :
self[something]
is legit in the Graph class because it inherits fro dict. This notation is from the dictionnaries ssyntax not from the class attribute declaration syntax.
Although all namespaces associated with a class are dictionnaries, in your class ChildObject, self isn't a dictionnary. Therefore you can't use that syntax.
Otoh, in your class Graph, self IS a dictionnary, since it is a graph, and all graphs are dictionnaries because they inherit from dict.