In the following code, in the method

talk(self)

,

self.name

. What self is self.name 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

__init__

&

__str__

. 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!"
        self.name = name
        
    def __str__(self):
        rep = "Critter object\n"
        rep += "name: " + self.name + "\n"
        return rep
    
    def talk(self):
        print "Hi. I'M", self.name, "\n"
        
# main
crit1 = Critter("Poochie")
crit1.talk()

crit2 = Critter("Randolph")
crit2.talk()

print "Printing crit1:"
print crit1

print "Directly accessing crit1.name:"
print crit1.name

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(crit1.name) will print Poochie. In the methods of the class, instead of writing crit1.name , you write self.name , 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'.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.