import sys class SomeClass(object): d = {} def __getitem__(self, k): print >> sys.stderr, "Calling __getitem__.." return self.d[k] def __setitem__(self, k, v): print >> sys.stderr, "Calling __setitem__.." self.d[k] = v def __delitem__(self, k): print >> sys.stderr, "Calling __delitem__.." del self.d[k] def __iter__(self): print >> sys.stderr, "Calling __iter__.." return self.d.iterkeys() def __contains__(self, item): print >> sys.stderr, "Calling __contains__.." return item in self.d def func(self): print >> sys.stderr, "Calling func" sc = SomeClass() print "func()" sc.func() print "foo => bar" sc["foo"] = "bar" print "baz => zanzibar" sc["baz"] = "zanzibar" for k in sc: print "key:", k print "val:", sc[k] del sc["foo"] print "Got foo?" assert "foo" not in sc if "baz" in sc: print sc["baz"]