Python Cookbook, 2nd Edition

   
book cover
   
•  Table of Contents
•  Index
•  Reviews
•  Reader Reviews
•  Errata
•  Academic
Python Cookbook, 2nd Edition
By David Ascher, Alex Martelli, Anna Ravenscroft
 
Publisher : O'Reilly
Pub Date : March 2005
ISBN : 0-596-00797-3
Pages : 844
   


Like its predecessor, the new edition offers a collection of solutions to problems that Python programmers face everyday. Updated for Python 2.4, it now includes over 200 recipes that range from simple tasks, such as working with dictionaries and list comprehensions, to complex tasks , such as monitoring a network and building a templating system.


   
book cover
   
•  Table of Contents
•  Index
•  Reviews
•  Reader Reviews
•  Errata
•  Academic
Python Cookbook, 2nd Edition
By David Ascher, Alex Martelli, Anna Ravenscroft
 
Publisher : O'Reilly
Pub Date : March 2005
ISBN : 0-596-00797-3
Pages : 844
   


    Copyright
    Preface
      The Design of the Book
      The Implementation of the Book
      Using the Code from This Book
      Audience
      Organization
      Further Reading
      Conventions Used in This Book
      How to Contact Us
      Safari Enabled
      Acknowledgments
        Chapter 1.  Text
      Introduction
      Recipe 1.1.  Processing a String One Character at a Time
      Recipe 1.2.  Converting Between Characters and Numeric Codes
      Recipe 1.3.  Testing Whether an Object Is String-like
      Recipe 1.4.  Aligning Strings
      Recipe 1.5.  Trimming Space from the Ends of a String
      Recipe 1.6.  Combining Strings
      Recipe 1.7.  Reversing a String by Words or Characters
      Recipe 1.8.  Checking Whether a String Contains a Set of Characters
      Recipe 1.9.  Simplifying Usage of Strings' translate Method
      Recipe 1.10.  Filtering a String for a Set of Characters
      Recipe 1.11.  Checking Whether a String Is Text or Binary
      Recipe 1.12.  Controlling Case
      Recipe 1.13.  Accessing Substrings
      Recipe 1.14.  Changing the Indentation of a Multiline String
      Recipe 1.15.  Expanding and Compressing Tabs
      Recipe 1.16.  Interpolating Variables in a String
      Recipe 1.17.  Interpolating Variables in a Stringin Python 2.4
      Recipe 1.18.  Replacing Multiple Patterns in a Single Pass
      Recipe 1.19.  Checking a String for Any of Multiple Endings
      Recipe 1.20.  Handling International Text with Unicode
      Recipe 1.21.  Converting Between Unicode and Plain Strings
      Recipe 1.22.  Printing Unicode Charactersto Standard Output
      Recipe 1.23.  Encoding Unicode Data for XML and HTML
      Recipe 1.24.  Making Some Strings Case-Insensitive
      Recipe 1.25.  Converting HTML Documents to Texton a Unix Terminal
        Chapter 2.  Files
      Introduction
      Recipe 2.1.  Reading from a File
      Recipe 2.2.  Writing to a File
      Recipe 2.3.  Searching and Replacing Text in a File
      Recipe 2.4.  Reading a Specific Line from a File
      Recipe 2.5.  Counting Lines in a File
      Recipe 2.6.  Processing Every Word in a File
      Recipe 2.7.  Using Random-Access Input/Output
      Recipe 2.8.  Updating a Random-Access File
      Recipe 2.9.  Reading Data from zip Files
      Recipe 2.10.  Handling a zip File Inside a String
      Recipe 2.11.  Archiving a Tree of Files into a Compressed tar File
      Recipe 2.12.  Sending Binary Data to Standard Output Under Windows
      Recipe 2.13.  Using a C++-like iostream Syntax
      Recipe 2.14.  Rewinding an Input File to the Beginning
      Recipe 2.15.  Adapting a File-like Object to a True File Object
      Recipe 2.16.  Walking Directory Trees
      Recipe 2.17.  Swapping One File Extension for Another Throughout a Directory Tree
      Recipe 2.18.  Finding a File Given a Search Path
      Recipe 2.19.  Finding Files Given a Search Path and a Pattern
      Recipe 2.20.  Finding a File on the Python Search Path
      Recipe 2.21.  Dynamically Changing the PythonSearch Path
      Recipe 2.22.  Computing the Relative Path from One Directory to Another
      Recipe 2.23.  Reading an Unbuffered Character in a Cross-Platform Way
      Recipe 2.24.  Counting Pages of PDF Documents on Mac OS X
      Recipe 2.25.  Changing File Attributes on Windows
      Recipe 2.26.  Extracting Text from OpenOffice.org Documents
      Recipe 2.27.  Extracting Text from Microsoft Word Documents
      Recipe 2.28.  File Locking Using a Cross-Platform API
      Recipe 2.29.  Versioning Filenames
      Recipe 2.30.  Calculating CRC-64 Cyclic Redundancy Checks
        Chapter 3.  Time and Money
      Introduction
      Recipe 3.1.  Calculating Yesterday and Tomorrow
      Recipe 3.2.  Finding Last Friday
      Recipe 3.3.  Calculating Time Periods in a Date Range
      Recipe 3.4.  Summing Durations of Songs
      Recipe 3.5.  Calculating the Number of Weekdays Between Two Dates
      Recipe 3.6.  Looking up Holidays Automatically
      Recipe 3.7.  Fuzzy Parsing of Dates
      Recipe 3.8.  Checking Whether Daylight Saving Time Is Currently in Effect
      Recipe 3.9.  Converting Time Zones
      Recipe 3.10.  Running a Command Repeatedly
      Recipe 3.11.  Scheduling Commands
      Recipe 3.12.  Doing Decimal Arithmetic
      Recipe 3.13.  Formatting Decimals as Currency
      Recipe 3.14.  Using Python as a Simple Adding Machine
      Recipe 3.15.  Checking a Credit Card Checksum
      Recipe 3.16.  Watching Foreign Exchange Rates
        Chapter 4.  Python Shortcuts
      Introduction
      Recipe 4.1.  Copying an Object
      Recipe 4.2.  Constructing Lists with List Comprehensions
      Recipe 4.3.  Returning an Element of a List If It Exists
      Recipe 4.4.  Looping over Items and Their Indices in a Sequence
      Recipe 4.5.  Creating Lists of Lists Without Sharing References
      Recipe 4.6.  Flattening a Nested Sequence
      Recipe 4.7.  Removing or Reordering Columnsin a List of Rows
      Recipe 4.8.  Transposing Two-Dimensional Arrays
      Recipe 4.9.  Getting a Value from a Dictionary
      Recipe 4.10.  Adding an Entry to a Dictionary
      Recipe 4.11.  Building a Dictionary Without Excessive Quoting
      Recipe 4.12.  Building a Dict from a List of Alternating Keys and Values
      Recipe 4.13.  Extracting a Subset of a Dictionary
      Recipe 4.14.  Inverting a Dictionary
      Recipe 4.15.  Associating Multiple Values with Each Key in a Dictionary
      Recipe 4.16.  Using a Dictionary to Dispatch Methods or Functions
      Recipe 4.17.  Finding Unions and Intersections of Dictionaries
      Recipe 4.18.  Collecting a Bunch of Named Items
      Recipe 4.19.  Assigning and Testing with One Statement
      Recipe 4.20.  Using printf in Python
      Recipe 4.21.  Randomly Picking Items with Given Probabilities
      Recipe 4.22.  Handling Exceptions Within an Expression
      Recipe 4.23.  Ensuring a Name Is Defined in a Given Module
        Chapter 5.  Searching and Sorting
      Introduction
      Recipe 5.1.  Sorting a Dictionary
      Recipe 5.2.  Sorting a List of Strings Case-Insensitively
      Recipe 5.3.  Sorting a List of Objects by an Attribute of the Objects
      Recipe 5.4.  Sorting Keys or Indices Basedon the Corresponding Values
      Recipe 5.5.  Sorting Strings with Embedded Numbers
      Recipe 5.6.  Processing All of a List's Items in Random Order
      Recipe 5.7.  Keeping a Sequence Ordered as Items Are Added
      Recipe 5.8.  Getting the First Few Smallest Items of a Sequence
      Recipe 5.9.  Looking for Items in a Sorted Sequence
      Recipe 5.10.  Selecting the nth Smallest Element of a Sequence
      Recipe 5.11.  Showing off quicksort in Three Lines
      Recipe 5.12.  Performing Frequent Membership Tests on a Sequence
      Recipe 5.13.  Finding Subsequences
      Recipe 5.14.  Enriching the Dictionary Type with Ratings Functionality
      Recipe 5.15.  Sorting Names and Separating Them by Initials
        Chapter 6.  Object-Oriented Programming
      Introduction
      Recipe 6.1.  Converting Among Temperature Scales
      Recipe 6.2.  Defining Constants
      Recipe 6.3.  Restricting Attribute Setting
      Recipe 6.4.  Chaining Dictionary Lookups
      Recipe 6.5.  Delegating Automatically as an Alternative to Inheritance
      Recipe 6.6.  Delegating Special Methods in Proxies
      Recipe 6.7.  Implementing Tuples with Named Items
      Recipe 6.8.  Avoiding Boilerplate Accessors for Properties
      Recipe 6.9.  Making a Fast Copy of an Object
      Recipe 6.10.  Keeping References to Bound Methods Without Inhibiting Garbage Collection
      Recipe 6.11.  Implementing a Ring Buffer
      Recipe 6.12.  Checking an Instance for Any State Changes
      Recipe 6.13.  Checking Whether an Object Has Necessary Attributes
      Recipe 6.14.  Implementing the State Design Pattern
      Recipe 6.15.  Implementing the "Singleton" Design Pattern
      Recipe 6.16.  Avoiding the "Singleton" Design Pattern with the Borg Idiom
      Recipe 6.17.  Implementing the Null Object Design Pattern
      Recipe 6.18.  Automatically Initializing Instance Variables from _ _init_ _ Arguments
      Recipe 6.19.  Calling a Superclass _ _init_ _ Method If It Exists
      Recipe 6.20.  Using Cooperative Supercalls Concisely and Safely
        Chapter 7.  Persistence and Databases
      Introduction
      Recipe 7.1.  Serializing Data Using the marshal Module
      Recipe 7.2.  Serializing Data Using the pickle and cPickle Modules
      Recipe 7.3.  Using Compression with Pickling
      Recipe 7.4.  Using the cPickle Module on Classes and Instances
      Recipe 7.5.  Holding Bound Methods in a Picklable Way
      Recipe 7.6.  Pickling Code Objects
      Recipe 7.7.  Mutating Objects with shelve
      Recipe 7.8.  Using the Berkeley DB Database
      Recipe 7.9.  Accesssing a MySQL Database
      Recipe 7.10.  Storing a BLOB in a MySQL Database
      Recipe 7.11.  Storing a BLOB in a PostgreSQL Database
      Recipe 7.12.  Storing a BLOB in a SQLite Database
      Recipe 7.13.  Generating a Dictionary Mapping Field Names to Column Numbers
      Recipe 7.14.  Using dtuple for Flexible Accessto Query Results
      Recipe 7.15.  Pretty-Printing the Contents of Database Cursors
      Recipe 7.16.  Using a Single Parameter-Passing Style Across Various DB API Modules
      Recipe 7.17.  Using Microsoft Jet via ADO
      Recipe 7.18.  Accessing a JDBC Database from a Jython Servlet
      Recipe 7.19.  Using ODBC to Get Excel Data with Jython
        Chapter 8.  Debugging and Testing
      Introduction
      Recipe 8.1.  Disabling Execution of Some Conditionals and Loops
      Recipe 8.2.  Measuring Memory Usage on Linux
      Recipe 8.3.  Debugging the Garbage-Collection Process
      Recipe 8.4.  Trapping and Recording Exceptions
      Recipe 8.5.  Tracing Expressions and Comments in Debug Mode
      Recipe 8.6.  Getting More Information from Tracebacks
      Recipe 8.7.  Starting the Debugger Automatically After an Uncaught Exception
      Recipe 8.8.  Running Unit Tests Most Simply
      Recipe 8.9.  Running Unit Tests Automatically
      Recipe 8.10.  Using doctest with unittest in Python 2.4
      Recipe 8.11.  Checking Values Against Intervals in Unit Testing
        Chapter 9.  Processes, Threads, and Synchronization
      Introduction
      Recipe 9.1.  Synchronizing All Methods in an Object
      Recipe 9.2.  Terminating a Thread
      Recipe 9.3.  Using a Queue.Queue as a Priority Queue
      Recipe 9.4.  Working with a Thread Pool
      Recipe 9.5.  Executing a Function in Parallel on Multiple Argument Sets
      Recipe 9.6.  Coordinating Threads by Simple Message Passing
      Recipe 9.7.  Storing Per-Thread Information
      Recipe 9.8.  Multitasking Cooperatively Without Threads
      Recipe 9.9.  Determining Whether Another Instanceof a Script Is Already Running in Windows
      Recipe 9.10.  Processing Windows Messages Using MsgWaitForMultipleObjects
      Recipe 9.11.  Driving an External Process with popen
      Recipe 9.12.  Capturing the Output and Error Streams from a Unix Shell Command
      Recipe 9.13.  Forking a Daemon Process on Unix
        Chapter 10.  System Administration
      Introduction
      Recipe 10.1.  Generating Random Passwords
      Recipe 10.2.  Generating Easily Remembered Somewhat-Random Passwords
      Recipe 10.3.  Authenticating Users by Means of a POP Server
      Recipe 10.4.  Calculating Apache Hits per IP Address
      Recipe 10.5.  Calculating the Rate of Client Cache Hits on Apache
      Recipe 10.6.  Spawning an Editor from a Script
      Recipe 10.7.  Backing Up Files
      Recipe 10.8.  Selectively Copying a Mailbox File
      Recipe 10.9.  Building a Whitelist of Email Addresses From a Mailbox
      Recipe 10.10.  Blocking Duplicate Mails
      Recipe 10.11.  Checking Your Windows Sound System
      Recipe 10.12.  Registering or Unregistering a DLL on Windows
      Recipe 10.13.  Checking and Modifying the Set of Tasks Windows Automatically Runs at Login
      Recipe 10.14.  Creating a Share on Windows
      Recipe 10.15.  Connecting to an Already Running Instance of Internet Explorer
      Recipe 10.16.  Reading Microsoft Outlook Contacts
      Recipe 10.17.  Gathering Detailed System Informationon Mac OS X
        Chapter 11.  User Interfaces
      Introduction
      Recipe 11.1.  Showing a Progress Indicator on a Text Console
      Recipe 11.2.  Avoiding lambda in Writing Callback Functions
      Recipe 11.3.  Using Default Values and Bounds with tkSimpleDialog Functions
      Recipe 11.4.  Adding Drag and Drop Reordering to a Tkinter Listbox
      Recipe 11.5.  Entering Accented Characters in Tkinter Widgets
      Recipe 11.6.  Embedding Inline GIFs Using Tkinter
      Recipe 11.7.  Converting Among Image Formats
      Recipe 11.8.  Implementing a Stopwatch in Tkinter
      Recipe 11.9.  Combining GUIs and Asynchronous I/Owith Threads
      Recipe 11.10.  Using IDLE's Tree Widget in Tkinter
      Recipe 11.11.  Supporting Multiple Values per Row in a Tkinter Listbox
      Recipe 11.12.  Copying Geometry Methods and Options Between Tkinter Widgets
      Recipe 11.13.  Implementing a Tabbed Notebook for Tkinter
      Recipe 11.14.  Using a wxPython Notebook with Panels
      Recipe 11.15.  Implementing an ImageJ Plug-in in Jython
      Recipe 11.16.  Viewing an Image from a URL with Swing and Jython
      Recipe 11.17.  Getting User Input on Mac OS
      Recipe 11.18.  Building a Python Cocoa GUI Programmatically
      Recipe 11.19.  Implementing Fade-in Windows with IronPython
        Chapter 12.  Processing XML
      Introduction
      Recipe 12.1.  Checking XML Well-Formedness
      Recipe 12.2.  Counting Tags in a Document
      Recipe 12.3.  Extracting Text from an XML Document
      Recipe 12.4.  Autodetecting XML Encoding
      Recipe 12.5.  Converting an XML Document into a Tree of Python Objects
      Recipe 12.6.  Removing Whitespace-only Text Nodes from an XML DOM Node's Subtree
      Recipe 12.7.  Parsing Microsoft Excel's XML
      Recipe 12.8.  Validating XML Documents
      Recipe 12.9.  Filtering Elements and Attributes Belonging to a Given Namespace
      Recipe 12.10.  Merging Continuous Text Events with a SAX Filter
      Recipe 12.11.  Using MSHTML to Parse XML or HTML
        Chapter 13.  Network Programming
      Introduction
      Recipe 13.1.  Passing Messages with Socket Datagrams
      Recipe 13.2.  Grabbing a Document from the Web
      Recipe 13.3.  Filtering a List of FTP Sites
      Recipe 13.4.  Getting Time from a Server via the SNTP Protocol
      Recipe 13.5.  Sending HTML Mail
      Recipe 13.6.  Bundling Files in a MIME Message
      Recipe 13.7.  Unpacking a Multipart MIME Message
      Recipe 13.8.  Removing Attachments from an Email Message
      Recipe 13.9.  Fixing Messages Parsed by Python 2.4 email.FeedParser
      Recipe 13.10.  Inspecting a POP3 Mailbox Interactively
      Recipe 13.11.  Detecting Inactive Computers
      Recipe 13.12.  Monitoring a Network with HTTP
      Recipe 13.13.  Forwarding and Redirecting Network Ports
      Recipe 13.14.  Tunneling SSL Through a Proxy
      Recipe 13.15.  Implementing the Dynamic IP Protocol
      Recipe 13.16.  Connecting to IRC and Logging Messages to Disk
      Recipe 13.17.  Accessing LDAP Servers
        Chapter 14.  Web Programming
      Introduction
      Recipe 14.1.  Testing Whether CGI Is Working
      Recipe 14.2.  Handling URLs Within a CGI Script
      Recipe 14.3.  Uploading Files with CGI
      Recipe 14.4.  Checking for a Web Page's Existence
      Recipe 14.5.  Checking Content Type via HTTP
      Recipe 14.6.  Resuming the HTTP Download of a File
      Recipe 14.7.  Handling Cookies While Fetching Web Pages
      Recipe 14.8.  Authenticating with a Proxy for HTTPS Navigation
      Recipe 14.9.  Running a Servlet with Jython
      Recipe 14.10.  Finding an Internet Explorer Cookie
      Recipe 14.11.  Generating OPML Files
      Recipe 14.12.  Aggregating RSS Feeds
      Recipe 14.13.  Turning Data into Web Pages Through Templates
      Recipe 14.14.  Rendering Arbitrary Objects with Nevow
        Chapter 15.  Distributed Programming
      Introduction
      Recipe 15.1.  Making an XML-RPC Method Call
      Recipe 15.2.  Serving XML-RPC Requests
      Recipe 15.3.  Using XML-RPC with Medusa
      Recipe 15.4.  Enabling an XML-RPC Server to Be Terminated Remotely
      Recipe 15.5.  Implementing SimpleXMLRPCServer Niceties
      Recipe 15.6.  Giving an XML-RPC Server a wxPython GUI
      Recipe 15.7.  Using Twisted Perspective Broker
      Recipe 15.8.  Implementing a CORBA Server and Client
      Recipe 15.9.  Performing Remote Logins Using telnetlib
      Recipe 15.10.  Performing Remote Logins with SSH
      Recipe 15.11.  Authenticating an SSL Client over HTTPS
        Chapter 16.  Programs About Programs
      Introduction
      Recipe 16.1.  Verifying Whether a String Represents a Valid Number
      Recipe 16.2.  Importing a Dynamically Generated Module
      Recipe 16.3.  Importing from a Module Whose Name Is Determined at Runtime
      Recipe 16.4.  Associating Parameters with a Function (Currying)
      Recipe 16.5.  Composing Functions
      Recipe 16.6.  Colorizing Python Source Using the Built-in Tokenizer
      Recipe 16.7.  Merging and Splitting Tokens
      Recipe 16.8.  Checking Whether a String Has Balanced Parentheses
      Recipe 16.9.  Simulating Enumerations in Python
      Recipe 16.10.  Referring to a List Comprehension While Building It
      Recipe 16.11.  Automating the py2exe Compilation of Scripts into Windows Executables
      Recipe 16.12.  Binding Main Script and Modules into One Executable on Unix
        Chapter 17.  Extending and Embedding
      Introduction
      Recipe 17.1.  Implementing a Simple Extension Type
      Recipe 17.2.  Implementing a Simple Extension Type with Pyrex
      Recipe 17.3.  Exposing a C++ Library to Python
      Recipe 17.4.  Calling Functions from a Windows DLL
      Recipe 17.5.  Using SWIG-Generated Modules in a Multithreaded Environment
      Recipe 17.6.  Translating a Python Sequence into a C Array with the PySequence_Fast Protocol
      Recipe 17.7.  Accessing a Python Sequence Item-by-Item with the Iterator Protocol
      Recipe 17.8.  Returning None from a Python-Callable C Function
      Recipe 17.9.  Debugging Dynamically Loaded C Extensions with gdb
      Recipe 17.10.  Debugging Memory Problems
        Chapter 18.  Algorithms
      Introduction
      Recipe 18.1.  Removing Duplicates from a Sequence
      Recipe 18.2.  Removing Duplicates from a Sequence While Maintaining Sequence Order
      Recipe 18.3.  Generating Random Samples with Replacement
      Recipe 18.4.  Generating Random Samples Without Replacement
      Recipe 18.5.  Memoizing (Caching) the Return Values of Functions
      Recipe 18.6.  Implementing a FIFO Container
      Recipe 18.7.  Caching Objects with a FIFO Pruning Strategy
      Recipe 18.8.  Implementing a Bag (Multiset) Collection Type
      Recipe 18.9.  Simulating the Ternary Operator in Python
      Recipe 18.10.  Computing Prime Numbers
      Recipe 18.11.  Formatting Integers as Binary Strings
      Recipe 18.12.  Formatting Integers as Strings in Arbitrary Bases
      Recipe 18.13.  Converting Numbers to Rationals via Farey Fractions
      Recipe 18.14.  Doing Arithmetic with Error Propagation
      Recipe 18.15.  Summing Numbers with Maximal Accuracy
      Recipe 18.16.  Simulating Floating Point
      Recipe 18.17.  Computing the Convex Hulls and Diameters of 2D Point Sets
        Chapter 19.  Iterators and Generators
      Introduction
      Recipe 19.1.  Writing a range-like Function with Float Increments
      Recipe 19.2.  Building a List from Any Iterable
      Recipe 19.3.  Generating the Fibonacci Sequence
      Recipe 19.4.  Unpacking a Few Items in a Multiple Assignment
      Recipe 19.5.  Automatically Unpacking the Needed Number of Items
      Recipe 19.6.  Dividing an Iterable into n Slices of Stride n
      Recipe 19.7.  Looping on a Sequence by Overlapping Windows
      Recipe 19.8.  Looping Through Multiple Iterables in Parallel
      Recipe 19.9.  Looping Through the Cross-Product of Multiple Iterables
      Recipe 19.10.  Reading a Text File by Paragraphs
      Recipe 19.11.  Reading Lines with Continuation Characters
      Recipe 19.12.  Iterating on a Stream of Data Blocks as a Stream of Lines
      Recipe 19.13.  Fetching Large Record Sets from a Database with a Generator
      Recipe 19.14.  Merging Sorted Sequences
      Recipe 19.15.  Generating Permutations, Combinations, and Selections
      Recipe 19.16.  Generating the Partitions of an Integer
      Recipe 19.17.  Duplicating an Iterator
      Recipe 19.18.  Looking Ahead into an Iterator
      Recipe 19.19.  Simplifying Queue-Consumer Threads
      Recipe 19.20.  Running an Iterator in Another Thread
      Recipe 19.21.  Computing a Summary Report with itertools . groupby
        Chapter 20.  Descriptors, Decorators,and Metaclasses
      Introduction
      Recipe 20.1.  Getting Fresh Default Values at Each Function Call
      Recipe 20.2.  Coding Properties as Nested Functions
      Recipe 20.3.  Aliasing Attribute Values
      Recipe 20.4.  Caching Attribute Values
      Recipe 20.5.  Using One Method as Accessorfor Multiple Attributes
      Recipe 20.6.  Adding Functionality to a Class by Wrapping a Method
      Recipe 20.7.  Adding Functionality to a Class by Enriching All Methods
      Recipe 20.8.  Adding a Method to a Class Instance at Runtime
      Recipe 20.9.  Checking Whether Interfaces Are Implemented
      Recipe 20.10.  Using _ _new_ _ and _ _init_ _ Appropriately in Custom Metaclasses
      Recipe 20.11.  Allowing Chaining of Mutating List Methods
      Recipe 20.12.  Using Cooperative Super calls with Terser Syntax
      Recipe 20.13.  Initializing Instance Attributes Without Using _ _init_ _
      Recipe 20.14.  Automatic Initialization of Instance Attributes
      Recipe 20.15.  Upgrading Class Instances Automatically on reload
      Recipe 20.16.  Binding Constants at Compile Time
      Recipe 20.17.  Solving Metaclass Conflicts
    Colophon
    Index