Namespaces and modules were invented for this purpose. The only feature that classes have over functions + modules is internal state. And it's evil.
I am especially frustrated by Uncle Bob suggested refactoring of long pure function into a class with private fields. You had a function you could not call wrongly and now you have internal state, race conditions, lifecycles. Good job.
How can a purely static class have internal state if there's no instantiation of the class or instance variables? Are you referring to variables declared on the class directly?
If so, that feels analogous to a function potentially having module-level state variables to me, in Python for instance.
I suppose, but that's if you build it that way. A 'pure' function can also have state if you pull it in through global vars or other functions. Writing stateless code has to be deliberate no matter which method you use.
We would really have to be talking about a specific language to discuss properly I think, but there is no need for internal state. There is more advantages as well, depending on language, in that one is extensible and one isn't. Some probably see that as a con, but I have done enough work backed into tight corners to know it is better to have it than to hack around something non-extensible.
I am especially frustrated by Uncle Bob suggested refactoring of long pure function into a class with private fields. You had a function you could not call wrongly and now you have internal state, race conditions, lifecycles. Good job.