Why does Python use
len(collection) instead of collection.len()?
Great question! Python uses len(collection) instead of collection.len() primarily due to its design philosophy. Here's why:
๐น 1. Simplicity and Consistency (The Zen of Python)
Python follows the principle:
"There should be one– and preferably only one –obvious way to do it."
Having a standard function like len() that works across all built-in types (lists, strings, dicts, etc.) provides consistency.
You don’t have to remember if it’s .size(), .length(), .count(), etc.
๐น 2. Uniform Interface for Built-ins and Custom Objects
len() is a built-in function that internally calls the special method __len__() on the object. This gives flexibility to customize behavior:
If Python had used collection.len(), you'd need every class to implement that specific method name, and it wouldn’t be as universal.
๐น 3. Separation of Interface and Implementation
Using len(obj) separates the public interface (len) from the internal mechanics (__len__). This is more in line with Python’s philosophy of:
“We’re all consenting adults here.”
๐น 4. Easier to Use in Polymorphic Code
Since len() works with any object implementing __len__(), it allows for duck typing:
✅ Summary
Why len(x) is better than x.len() |
|---|
| More readable and consistent |
| Works across built-ins and user-defined types |
Enables polymorphism via __len__() |
| Avoids inconsistent method names |
So while x.len() might seem more "object-oriented," len(x) is more Pythonic.

No comments:
Post a Comment