"""Container function overloading This class illustrates the special member functions use to overload operators that work on container classes. See http://docs.python.org/ref/sequence-types.html for more details. >>> c = abscontainer.AbstractContainer() >>> len(c) Called len(container) 0 >>> c[2] Called container[2] >>> c['Paris'] = 'France' Called container[Paris] = France >>> del c[15.5] Called del container[15.5] >>> [x for x in c] Called for x in container [None] >>> 'zed' in c Called zed in container False >>> """ class AbstractContainer(object): def __repr__(self): return "container" def __len__(self): print "Called len(%s)" % self return 0 def __getitem__(self, key): print "Called %s[%s]" % (self, key) return None def __setitem__(self, key, value): print "Called %s[%s] = %s" % (self, key, value) def __delitem__(self, key): print "Called del %s[%s]" % (self, key) def __iter__(self): print "Called for x in %s" % self yield None def __contains__(self, item): print "Called %s in %s" % (item, self) return False