This answer actually applies to all methods, but the question usually comes up first in the context of constructors.

In C++ you'd write

class C {
    C() { cout << "No arguments\n"; }
    C(int i) { cout << "Argument is " << i << "\n"; }
}

in Python you have to write a single constructor that catches all cases using default arguments. For example:

class C:
    def \_\_init\_\_(self, i=None):
        if i is None:
            print "No arguments"
        else:
            print "Argument is", i

This is not entirely equivalent, but close enough in practice.

You could also try a variable-length argument list, e.g.

def \_\_init\_\_(self, *args):
    ....

The same approach works for all method definitions.

CATEGORY: programming