Paradigm shift - from behaviours inside object in OOAD to Julia where behaviours emerge from type of function parameters - State Design Pattern - julian way

I don’t see the difference or the “paradigm shift”. Julia’s wash(s::ChickenState) = s is Python’s:

class ChickenState:
    def wash(s):
        return s

It’s essentially the same thing: the behavior of wash changes depending on the type of the first argument. Julia’s abstract types like ChickenState usually define default versions of the API’s functions, just like Python’s base classes do. So the two systems seem largely the same.

What Python can’t easily do is dispatch on types of multiple arguments, like show(::IO, ::MyCustomType).