On Fri, 28 Sep 2012 18:02:04 +0000, Prasad, Ramit wrote: > Just to make sure I am following, if you call foo.__len__() it goes to > the instance code while if you do len(foo) it will go to > class.__len__()?
If you call foo.__len__, the attribute lookup of __len__ will use the exact same search path as foo.spam would use: 1) does __getattribute__ exist and intercept the call? 2) if not, does a instance attribute exist? 3) if not, does a class attribute exist? 4) if not, does a superclass attribute exist? 5) if not, does __getattr__ exist and intercept the call? Using len(foo) bypasses steps 1) and 2) as a speed optimization. For the common case where an instance's class directly defines a __len__ method, that saves about 10-15% of the overhead of calling a special method, compared to old-style classes. -- Steven -- http://mail.python.org/mailman/listinfo/python-list