understaning "self"
7stud
bbxx789_05ss at yahoo.com
Thu Feb 21 13:49:56 EST 2008
On Feb 21, 6: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
def bark():
print "Yip, yip."
class Dog(object):
def __init__(the_obj_that_called_this_method):
the_obj_that_called_this_method.name = "Blackie"
print "Initializing a dog object."
def bark(the_obj_that_called_this_method):
print 'My name is', the_obj_that_called_this_method.name
print "Woof, woof."
d = Dog()
d.bark()
Because the variable name: 'the_obj_that_called_this_method' is too
hard to type, by convention people use the variable name: 'self'
instead.
> What I think "self" is doing is limiting the function
> call to only function in "this" class.
No. Whenever you write obj.method_name, the '.' directs python to
look inside obj's class definition for the specified method. When you
call a function like this:
def show(x):
print x
show('hello')
python assigns the argument 'hello' to the parameter variable x. When
you write:
d.bark()
even though there are no arguments specified in that method call,
python secretly passes one argument to the method: the object on the
left side of the '.'.
More information about the Python-list
mailing list