#!/usr/bin/env python
#
import json
from datetime import date


class Parrot():  # <1>
    def __init__(self, name, color):
        self._name = name
        self._color = color

    @property
    def name(self):  # <2>
        return self._name

    @property
    def color(self):
        return self._color


parrots = [  # <3>
    Parrot('Polly', 'green'),  #
    Parrot('Peggy', 'blue'),
    Parrot('Roger', 'red'),
]


def encode(obj):  # <4>
    if isinstance(obj, date):  # <5>
        return obj.ctime()  # <6>
    elif isinstance(obj, Parrot):  # <7>
        return {'name': obj.name, 'color': obj.color}  # <8>
    return obj  # <9>


data = {  # <10>
    'spam': [1, 2, 3],
    'ham': ('a', 'b', 'c'),
    'toast': date(2014, 8, 1),
    'parrots': parrots,
}

print(json.dumps(data, default=encode, indent=4))  # <11>
