Re: understaning "self"
- From: 7stud <bbxx789_05ss@xxxxxxxxx>
- Date: Thu, 21 Feb 2008 10:49:56 -0800 (PST)
On Feb 21, 6:34 am, "Poppy" <znfmail-pythonl...@xxxxxxxxx> 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 '.'.
.
- Follow-Ups:
- Re: understaning "self"
- From: 7stud
- Re: understaning "self"
- References:
- understaning "self"
- From: Poppy
- understaning "self"
- Prev by Date: Re[2]: python-ldap for plone 3 (python 2.4.4)
- Next by Date: Re: can't set attributes of built-in/extension type
- Previous by thread: Re: understaning "self"
- Next by thread: Re: understaning "self"
- Index(es):
Relevant Pages
|