[Tutor] methods vs. functions

Modulok modulok at gmail.com
Tue Aug 23 00:51:10 CEST 2011


On 8/22/11, Prasad, Ramit <ramit.prasad at jpmorgan.com> wrote:
> Steven D'Aprano wrote:
>>(Methods are very similar to functions. At the most basic level, we can
>>pretend that a method is just a function that comes stuck to something
>>else. Don't worry about methods for now.)
>
> Can someone please explain the difference between methods and functions?
>
> Thanks,
> Ramit

At the most basic level, they're the same. If you have a named, stand-alone
section of code that (optionally) operates on some argument passed to it, it's
called a function. If you have the same exact code, but you group it together
into a named unit along with the data it (optionally) operates on, it's called
a method. Technically in Python, they're both objects, both callables and can
be called in similar ways. The distinction is quite minimal. Here's a few
examples:


# A function that expects the first argument to be some object it operates on.
# This is just like a method, except it hasn't been declared within any class.
# Therefore, it's called a function:

def setx(foo):
    foo.x = 1


# The same exact thing again, but declared in a 'Bar' class. Now it's
# called a method. Normally the first parameter to every instance method is
# named 'self', (A convention you should adhere to.) To make this example
# clearer, however, I use the name 'foo' instead just like the last example:

class Bar(object):
    def setx(foo):
        foo.x = 1


The call itself is a little different:

    # As a function you must pass the arguments:

    a = Bar()
    setx(a)     #<-- Explicitly pass the object as an argument.

    # As a method the first argument is implied:

    a = Bar()
    a.setx()    #<-- First argument is passed automatically for you.

That said, you could also call a method as if it were a function living in the
Bar namespace:

    a = Bar()
    Bar.setx(a)

You can even declare a function within a class that *doesn't* operate on any
instance of the class. Just like an ordinary function, you must pass all
arguments. This is called a static method and is declared with the
'@staticmethod' decorator:

    class Baz(object):
        @staticmethod
        def bonzo(x, y):
            return x+y

You can then call it like this:

    Baz.bonzo(3, 5)

This looks remarably similar to calling a function that exists in some
namespace. For example:

    import random
    random.randrange(3, 5)


So the ultimate difference? Pretty much just where you declare it. If it's in a
class it's called a method, outside of a class its called a function.
Especially in python - the distinction is small.

-Kurt-


More information about the Tutor mailing list