Function overloading in Python: Missing [closed]

By : Xolve
Source: Stackoverflow.com
Question!

As this says:

http://web.archive.org/web/20090624083829/http://mail.python.org/pipermail/python-list/2003-May/206149.html

Function overloading is absent in Python.

As far as I feel this a big handicap since its also an OO language. Initially I found that unable to differentiate between the argument types was difficult but the dynamic nature of Python made it easy (e.g. list, tuples, strings are much similar).

However counting the number of arguments passed and then doing the job is like an overkill.

By : Xolve


Answers

Now, unless you're trying to write C++ code using Python syntax, what would you need overloading for?

I think it's exactly opposite, overloading is only necessary to make strongly typed languages act more like Python. In Python you have keyword argument, you have *args and **kwargs.

See for example: What is a clean, pythonic way to have multiple constructors in Python?

By : vartec


As unwind noted, keyword arguments with default values can go a long way.

I'll also state that in my opinion, it goes against the spirit of Python to worry a lot about what types are passed into methods. In Python, I think it's more accepted to use duck typing -- asking what an object can do, rather than what it is.

Thus, if your method may accept a string or a tuple, you might do something like this:

def print_names(names):
    """Takes a space-delimited string or an iterable"""
    try:
        for name in names.split(): # string case
            print name
    except AttributeError:
        for name in names:
            print name

Then you could do either of these:

print_names("Ryan Billy")
print_names(("Ryan", "Billy"))

Although an API like that sometimes indicates a design problem.



You can pass a mutable container datatype into a function, it can contain anything you want.

If you need a different functionality, name the functions differently, or if U need a same interface, just write a interface function (or method) that calls the functions appropriately based on the data received.

It took a while to me to get adjusted to this coming from Java, But it really isnt a "big handicap"



This video can help you solving your question :)
By: admin