Skip to main content

The Zen of Zope, by Jeffrey 'Alex' Clark

A crash course on the Zope Component Architecture (ZCA), told through the 19 aphorisms of The Zen of Python.

Background

Python has import this, which prints The Zen of Python by Tim Peters. Daniel Greenfeld answered it with that, The Anti-Zen of Python. And so, naturally, there is import other.

Each line of the Zen is rewritten around a ZCA concept and then demonstrated with working zope.interface and zope.component code: interfaces and the objects that implement or provide them, invariants, tagged values, adapters and multi-adapters, subscribers, adapter hooks, verification and utilities. Read src/other/__init__.py in the repository from top to bottom to see how each line is produced.

It was written in 2012, based on the zope.interface and zope.component documentation, and updated for Python 3 in 2026.

Installation

other requires Python 3.10 or later. Install it from PyPI:

$ pip install other

This also installs zope.component and zope.interface.

Usage

Run it from the command line (import other prints the same thing):

$ python -m other
The Zen of Zope, by Jeffrey 'Alex' Clark


Beautiful is an attribute of person.
Explicit is implemented by implicit.
Simple is provided by complex.
Complex is directly provided by complicated.
Flat only implements nested.
Sparse has tagged value dense.
Readability count is not in range.
Special cases could not adapt the rules.
Practicality implements purity.
Errors should never require a specification that doesn’t extend the specification of silence.
Unless explicit is a multi-adapter.
In subscribing to ambiguity, return all the objects that refuse the temptation to guess.
There should be none-- and preferably only zero --output from a handler.
Although that way may not be obvious at first unless you've registered an adapter hook.
Now is verified by never.
Although never is not implemented by *right* now.
If the implementation is hard to explain, it queries the bad idea utility.
If the implementation is easy to explain, it may query the good idea utility.
Implicit namespace packages are one honking great idea -- let's do more of those!

Development

Clone the repository and install it in editable mode, along with the dev dependency group (pip 25.1 or later):

$ git clone https://github.com/aclark4life/other.git
$ cd other
$ pip install -e . --group dev

Run the tests with pytest from the root of the clone:

$ pytest

Linting and formatting use ruff, run through prek pre-commit hooks. Install the hooks once per clone, and they run on every commit:

$ prek install

To run every hook against every file (this may fix and reformat files):

$ prek run --all-files

License

MIT. See LICENSE.

Changelog

2.1.0 (2026/10/23)

  • Declare zope.interface as a direct dependency [aclark]
  • Add a dev dependency group with prek [aclark]
  • License under MIT [aclark]
  • Drop the that dependency; it was never imported [aclark]
  • Use the full author name, Jeffrey 'Alex' Clark [aclark]
  • Convert the README to Markdown and rename CHANGES.txt to CHANGELOG.md [aclark]
  • Run the tests with pytest; add a test dependency group [aclark]
  • Make other a package in a src layout, with tests in tests/ [aclark]
  • Reorganize the tutorial so each section defines what it uses [aclark]
  • Trim boilerplate from the tutorial: dataclasses instead of assign-only __init__ methods, one-line docstrings, size() instead of getSize() [aclark]
  • Explain in each section's banner how its line of the Zen becomes ZCA code [aclark]
  • Make section 3 literally true: ISimple is provided by a Complex instance [aclark]
  • Drop MANIFEST.in and requirements.txt; add Python version classifiers, keywords and project URLs [aclark]
  • Add background, installation and development sections to the README [aclark]
  • Fix the adapter hook breaking failed adaptation process-wide after import [aclark]
  • Make sections 1, 10, 11 and 13 demonstrate what their lines describe [aclark]
  • Test the full output against the README, and the adapter hook fix [aclark]

2.0.1 (2026/10/22)

  • Replace Gittip URL with GitHub Sponsors Funding URL in project metadata [aclark]

2.0.0 (2026/10/22)

  • Drop Python 2; require Python 3.10+ [aclark]
  • Use @implementer class decorators instead of implements() [aclark]
  • Move packaging to pyproject.toml [aclark]
  • Publish to PyPI with trusted publishing via GitHub Actions [aclark]
  • Add tests [aclark]

1.0.0 (2012/12/8)

  • First release [aclark]

Metadata

Release files for other 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for other 2.1.0
File Size Uploaded Provenance
other-2.1.0.tar.gz 11.2 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for other 2.1.0
File Interpreter ABI Platform
other-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.5 kB

Release files / other-2.1.0.tar.gz

Download URL other-2.1.0.tar.gz
Size 11.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d805693f422fb2df29f7f8db0a2525ad5327b6e2e9f506ba5b11c920f5664d6a
BLAKE2b-256 checksum
How to use checksums
739897d6304bfc0b29aa8f72e56a5186a463c7db01b5bf6a72ad392f2d66b600
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / other-2.1.0-py3-none-any.whl

Download URL other-2.1.0-py3-none-any.whl
Size 9.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8d47868cde6297d0c8925a80899490529cea931bc0cf98c96274715a2a78d83f
BLAKE2b-256 checksum
How to use checksums
cb2596ceb660c97be5f8e9a452d0f07ffa5c91bca7bd3a5c270fc3fda9da7ba4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Security for other 2.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for other-2.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page