This post is for my friends who become really confused with len() function and __len__() special method.
len(obj) is a builtin function which returns the length of an object. The obj argument can be either a sequence (lists, tuple or string) or a mapping (dictionary).
Now object.__len__(self) is the special method which is called in the implementation of len() function. For a class you define object.__len__(self) function and compute the length, then calling len(obj) on the instance gives you the length.
len() also does sanity checking on top of object.__len__(self) output.
>>> class Foo(object): ... def __len__(self): return '1' ... >>> obj = Foo() >>> obj.__len__() '1' >>> len(obj) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: an integer is required