How to make python class support item assignment? How to make python class support item assignment? python python

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.