Generalizing Polymorphism With Multimethods
Object-oriented programming gains much of its versatility through polymorphism: objects of different kinds can behave in similar ways, given the right contexts. But most OOP programming is single dispatch; that is, just one designated object determines which code path is taken. Conceptually, a more general technique is to allow all the arguments to a function/method to determine its specialization. This article presents an implementation of multiple dispatch in Python, and shows examples where this makes for better programs.
Instead of mucking around with experimental Python extensions, consider that the first OO language that achieved an ANSI standard has multiple dispatch. That's right, Common Lisp!