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

Reply via email to