Dunder Methods & Operator Overloading
You'll learn to
- -Implement `__str__` and `__repr__` to control how an object prints and debugs
- -Implement `__eq__` and `__len__` to make custom objects comparable and sizeable
- -Understand `__lt__` and how it enables sorting custom objects
By default, printing an instance of your own class produces an unhelpful message like <__main__.Stack object at 0x7f8b2c0a1d90>. Dunder ("double underscore") methods let you plug your class into Python's built-in behaviors, printing, equality, len(), sorting, so your objects behave as naturally as the built-in types you have been using all course. This matters immediately: several early Forge Algorithm Lab levels ask you to build a class, and a clean __repr__ is often the difference between a five-second debugging session and a confusing one.
__str__ and __repr__
__str__ controls what print(obj) and str(obj) show, a readable, human-facing description. __repr__ controls what you see in a debugger, a REPL, or inside a list/dict of objects. It should ideally be unambiguous enough to help you debug, and by convention often looks like code that could recreate the object.
If you only implement one of the two, implement __repr__. Python falls back to __repr__ for print() if __str__ is missing, but not the other way around. This is exactly what you want when debugging a failing Forge Algorithm Lab submission: a good __repr__ lets you print() your data structure mid-algorithm and immediately see its state.
__eq__: Custom Equality
By default, == on two instances of your class checks identity (are they the exact same object in memory), the same as is. __eq__ lets you define what "equal" means for your class, typically, that all the meaningful attributes match.
__len__ and __lt__
__len__ lets len(obj) work on your class, useful for any custom container (a stack, a queue, a hash map, exactly the kind of classes the Forge Algorithm Lab asks you to build). __lt__ (less than) defines what < means between two instances, and once it exists, sorted() and .sort() can order your objects automatically.
- -__str__ is human-readable display, used by print() and str().
- -__repr__ is an unambiguous debug representation, used by the REPL, debuggers, and inside collections.
- -__eq__ defines == between two instances (attribute-by-attribute comparison instead of identity).
- -__len__ makes len(obj) work, essential for any custom container type.
- -__lt__ defines <, which is all sorted() and .sort() need to order a list of your objects.
These are called "dunder" methods because their names start and end with double underscores. Python calls them automatically in response to built-in syntax (print(), ==, len(), sorted()). You almost never call them directly yourself.
Interview Signal is part of Pro
See a real weak answer next to a real strong one for this exact topic.
Quiz is part of Pro
Test what you just read with a short quiz, and bank the XP.
Module Assignment is part of Pro
Write real, graded Python for this module - right here in the course.
Discussion0
Join the Discussion
Sign in to leave comments, reply to others, or like insights.
No comments yet. Be the first to start the thread!