Methods with the same name in one class in Python Methods with the same name in one class in Python python python

Methods with the same name in one class in Python


You can have a function that takes in a variable number of arguments.

def my_method(*args, **kwds):    # Do something# When you call the methodmy_method(a1, a2, k1=a3, k2=a4)# You get:args = (a1, a2)kwds = {'k1':a3, 'k2':a4}

So you can modify your function as follows:

def my_method(*args):    if len(args) == 1 and isinstance(args[0], str):        # Case 1    elif len(args) == 2 and isinstance(args[1], int):        # Case 2    elif len(args) == 2 and isinstance(args[1], str):        # Case 3


You can't. There are not overloads or multimethods or similar things. One name refers to one thing. As far as the language is concerned anyway, you can always emulate them yourself... You could check types with isinstance (but please do it properly - e.g. in Python 2, use basestring to detect both strings and unicode), but it's ugly, generally discouraged and rarely useful. If the methods do different things, give them different names. Consider polymorphism as well.


Short answer: you can't (see this previous discussion). Typically you'd use something like (you could add more type checking and reorder):

def my_method(self,parameter_A, parameter_B=None):  if isinstance(parameter_B, int):    print parameter_A * parameter_B  else:    print parameter_A    if parameter_B is not None:      print parameter_B