If I understand the PEP right, this explanation is missing the part where it's only useful to extend abstract classes; python classes are open so you can just add a method to a concrete class to get single-dispatch if that's all you need. I don't think the example given needs generics at all.
>python classes are open so you can just add a method to a concrete class to get single-dispatch if that's all you need.
Except then your method shares a namespace with all the other methods defined on the class, which is ugly, and can cause clashes.
I had a hard time understanding the value of the idea from this as well. The link I gave made it a bit clearer to me.
Nice! That's something I like about Haskell and Elixir: the ability to define behavior for a given case. Though it looks like that's constrained to type-based dispatch (a la Java method overloading). Is there any way to define for specific values?