The interfaces module

Description

The module where you define interfaces describing what your content class(es) will do.

Why do you need interfaces?

Interfaces are useful to describe what a class will do. They are a kind of contract between a class and the components that class interact with. Starting a content management functionality package with writing interfaces is recommended practice as it helps document your code. In addition to that, Zope Component Architecture (ZCA) allows us to use interfaces as components for adapting a class (which is useful as new user requirements appear) and thus specializing its behaviour.

The interface for the Instant Message class

This is done by convention in the interfaces.py file, that you need to add at the root of the package.

First, we need an import from Zope’s zope.interface module, which is included into Zope 2’s distribution since version 2.8:

from zope.interface import Interface

Following ZCA naming conventions (interface names start with an I), we define the IInstantMessage interface we need for the InstantMessage class that we will define later:

class IInstantMessage(Interface):
    """
    Interface for the InstantMessage class.
    """

That’s it!

We could add attribute definitions to it using the zope.interface.Attribute class, but this is not mandatory. When an interface is defined as above, without any function nor attribute, we call it a “marker interface” meaning that it will be used simply to “mark” the instances of the class that implements it.

More information about interfaces in the context of Archetypes can be found in the b-org tutorial - Interfaces section. For a detailed presentation of interfaces and their usage patterns, read the doctests document available from Zope’s documentation site.