In the following code, in the method



. What self is referring to? I though variables created in functions and methods are only good within that method or function. But here it looks like it's talking to




. Can someone please explain? It's starting to get complicated and frustrating now. Thanks.

# Attribute Critter
# Demonstrates creating and accessing object attributes

class Critter(object):
    """A virtual pet"""
    def __init__(self, name):
        print "A new critter has been born!" = name
    def __str__(self):
        rep = "Critter object\n"
        rep += "name: " + + "\n"
        return rep
    def talk(self):
        print "Hi. I'M",, "\n"
# main
crit1 = Critter("Poochie")

crit2 = Critter("Randolph")

print "Printing crit1:"
print crit1

print "Directly accessing"

raw_input("\n\nPress the enter key to exit.")

Imagine the 2 objects like boxes containing data

crit1  --->   | name: Poochie |

crit2 --->    | name: Randolf |

You can access this data with the dot operator. For example print( will print Poochie. In the methods of the class, instead of writing , you write , because the method applies to any instance of pet. 'self' is a default variable name which means 'the current object to which this method applies'.