So I wanted to do my taxes.  I wrote a 'tax2003' Python module containing
a bunch of stuff like this:

class employer1:
    earnings = 12345.67
    federal_wh = 1234.56

class employer2:
    earnings = 123456.78
    federal_wh = 12345.67

class form1040:
    # income
    wages = employer1.earnings + employer2.earnings
    business_income = scheduleC.net_profit
    total_income = wages + business_income
    # ...
    assert line39 > 103000
    taxable_income = max(line39 - line40, 0)
    # ...
    # payments
    federal_wh = employer1.federal_wh + employer2.federal_wh
    amount_owed = total_tax - total_payments

etc.  When I imported this module, I could inspect things like
form1040.amount_owed; I did this interactively with Emacs's python-mode,
which let me just C-c RET to reimport the module; then I could look at
the values of variables.  When I was done, though, I wanted to get a
printout of all these values (so I could fill out the actual forms, and
also so I could find any errors I'd made) and delete this module so I
could put my computer back online.  So I wrote this function to print
out all the amounts:

import types

def listmod(module, name=None):
    if name is None: name = module.__name__
    if type(module) in (type(''), type(1), type(1.2)):
        print "%s = %s" % (name, module)
    else:
        for subname in dir(module):
            if subname[:2] == '__': continue
            obj = getattr(module, subname)
            if type(obj) is type(types): continue  # no submodules!
            listmod(obj, name + '.' + subname)

Then I ran listmod.listmod(tax2003) and got output like:
tax2003.employer1.earnings = 12345.67
tax2003.employer1.federal_wh = 1234.56
...
tax2003.form1040.tax = 22032532
tax2003.form1040.amount_owed = 22030403.8215375

It's not TurboTax, but it keeps me from making any arithmetic errors.

Reply via email to