Simple Python __str__(self) method for use during development

For my development work I want a simple way to display the data in an object instance without having to modify the __str__(self) method every time I add, delete, or rename members. Here’s a technique I’ve adopted that relies on the fact that every object stores all of its members in a dictionary called self.__dict__. Making a string representation of the object is just a matter of returning a string representation of __dict__. This can be achieved in several ways. One of them is simply str(self.__dict__) and the other uses the JSON serializer json.dumps(), which lets you prettyprint the result.

Here’s a little Python demonstrator program:

# /usr/bin/python

""" demo - demonstrate a simple technique to display text representations
    of Python objects using the __dict__ member and a json serializer.

    $Id:,v 1.3 2015/07/18 13:07:15 marc Exp marc $

import json

class something(object):
    """ This is just a demonstration class. """
    def __init__(self, id, name): = id = name

    def rename(self, name): = name

    def __str__(self):
        return json.dumps(self.__dict__, indent=2, separators=(',', ': '))
        # return str(self.__dict__)

def main():
    o1 = something(1, "first object")
    o2 = something(2, "second object")

    print str(o1)
    print str(o2)

    o1.rename("dba third object")

    print str(o1)

if __name__ == '__main__':

Running it produces this output:

$ python
  "id": 1,
  "name": "first object"
  "id": 2,
  "name": "second object"
  "id": 1,
  "name": "dba third object"

Nice and easy for testing and debugging. Once I’m ready for production and no longer want the JSON representations I can introduce a DEBUG flag so that the non-DEBUG behavior of __str__(self) is appropriate to the production use.


What’s wrong with this?  If I have a member that is itself an object, then the json.dumps() call fails.  Ideally Python would call __str__() on a member if __str__() was called on the object.

On reading some more goodies, it’s clear that what I should be using is repr() and not str().

Published by


Computer scientist born and raised in NYC and living here and raising my family. Working in high tech.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s