General design principles ------------------------- The received Python wisdom is to use "duck typing": instead of explicitly checking ``isinstance(obj, Duck)``, assume anything with a ``quack()`` method will do the job. For large-scale projects this philosophy can be questioned, but it's what we adopt here. General code style ------------------ - We aim for 80 character width, but treat this as a guideline, since readability should come first. - For standard library imports, we prefer "import" rather than "import from".