In Python, you could limit generic dispatch to argument type only without losing generality since you could override the `isinstance` operator. For instance, you could define a `const()` type so that `isinstance(x, const(100))` is true if and only if `x == 100`. Then your example could be written in Python as:
foo = generic()
foo.when(const(0))
def foo_0(x): print "passed in zero"
foo.when(const(100))
def foo_100(x): print "passed in 100"
foo.when(const(200))
def foo_200(x): print "passed in 200"
foo.when(int)
def foo_default(x): print "passed in", x
This is not as elegant as in a language with native support for generic functions, but it works. I wish mainstream languages started to adopt multi-methods; it's conceptually very simple and much more extension-friendly than traditional OOP. Sadly it doesn't seem to happen.