My first thought was that you could just as well use standalone factory functions. However, he brought up a good point. If I use a factory function, the class name is hard coded in the factory function. It can't easily return an instance of some subclass of the class. That's not the case with class methods.
Let me show you what I mean:
class MyClass:Here I am instantiating an instance of MySubclass, but I am using the class method one_constructor from the superclass as the constructor.
# This is the "base" constructor.
def one_constructor(klass, foo):
# This is one special constructor.
self = klass()
self.foo = foo
def another_constructor(klass, bar):
# This is another special constructor.
# This does some necessary customizations.
obj = MySubclass.one_constructor('foo')
If you've followed me so far, then perhaps you can imagine why Java's "public static void main" sometimes makes sense for Python too.