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")

crit2 = Critter("Randolph") 

print "Printing crit1:"
print crit1

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

raw_input("\n\nPress the enter key to exit.")
8 Years
Discussion Span
Last Post by mn_kthompson

__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.

Edited by vegaseat: n/a


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.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.