In the following program, at what point does my program call the _str__ method/constructor? I don't see it specifically being called at any point. I know it happens with this line print

"Printing crit1:"
print crit1

but I still don't see how or when this happens. Thanks for any and all help.

# Attribute Critter
# Demonstrates creating and accessing object attributes

class Critter(object):
    """A virtuaal 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.")

__str__() does operator overloading in a class and "hijacks" str() in any class instance operation that uses str(). So print crit1 will use it, because it uses str() to make it printable. Whereas crit1.name is already printable.

Add this in line 12 and I think you'll see it getting called.

print "__str__ has been called."

The __str__ is called when you try to turn something that is not a string (in this case a critter) into a string. So when you print critter, python first tries to figure out how to turn a critter into a string which is what the __str__ is for. That is when and why python calls your __str__ function.

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.