understaning "self"

Mike Driscoll kyosohma at gmail.com
Thu Feb 21 09:06:51 EST 2008


On Feb 21, 7:34 am, "Poppy" <znfmail-pythonl... at yahoo.com> wrote:
> I've been searching online to try get a better understanding of what "self"
> does when I define this parameter in my class functions. All I'm finding is
> debates on whether  "self" has any value to the language but that doesn't
> help me in my newbie question. So the code excerpt below is from "Beginning
> Python" Norton, Samuel, Aitel, Foster-Johnson, Richardson, Diamon, Parker,
> and Roberts.
>
> What I think "self" is doing is limiting the function call to only function
> in "this" class. So in the function below "has" calls self.has_various(), if
> I had a function called "has_various" in my program or another included
> class using "self" insures that the "has_various" below is the one used. Am
> I correct in my understanding?
>
> thanks,
>
> Zach-
>
>     def has(self, food_name, quantity=1):
>         """
> has(food_name, [quantity]) - checks if the string food_name is in the
> fridge. quantity defaults to 1
> returns True if there is enough, false otherwise.
> """
>
>         return self.has_various({food_name:quantity})
>
>     def has_various(self, foods):
>         """
> has various(foods) determines if the dictionary food_name
> has enough of every element to satisfy a request.
> returns true if there's enough, Fasle if there's not or if an element does
> not exist.
> """
>         try:
>             for food in foods.keys():
>                 if self.items[food] < foods[food]:
>                     return False
>             return True
>         except KeyError:
>             return False

I think you are correct. The term "self" is a convention more than
anything. You can use another name, but it's not recommended as 99% of
developers expect it to be called "self".

You can read up on it here: http://www.diveintopython.org/object_oriented_framework/defining_classes.html

In there, they define it this way and I quote:

"The first argument of every class method, including __init__, is
always a reference to the current instance of the class. By
convention, this argument is always named self. In the __init__
method, self refers to the newly created object; in other class
methods, it refers to the instance whose method was called. Although
you need to specify self explicitly when defining the method, you do
not specify it when calling the method; Python will add it for you
automatically."

Hope that helps.

Mike



More information about the Python-list mailing list