Presented at ChiPy on 4/12/2012
Zope Interfaces provide a way for Python objects to promise to provide certain attributes and methods. Without losing the benefits of duck-typing this can add a bit of structure and also doubles as runnable documentation. For example, an application developer might point to an interface that can be implemented to create a plugin, and the plugin developer can verify at runtime that he or she has properly implemented this interface. Furthermore, the metadata about what interfaces an object provides can be used to wire up dependencies between objects at runtime or configuration time with confidence that the relationships are compatible.
For a simple example of the mechanics of creating and implementing interfaces, see expression.py. Zope interfaces can also specify invariants, and binary_search.py shows this in action. Finally to discover what metadata zope interfaces are adding to objects to provide all of this behavior, check out class_diff.py. Some of these slides have strange strings in them that I used to generate the original set of slides, so just ignore that.
The full set of slides as presented are available here but they probably aren't terribly useful.
- zope.interface documentation
- What are interfaces? -- Zope Documentation
- Purpose of Zope Interfaces? -- stackoverflow
- PEP 3119: Introducing Abstract Base Classes
- What Bothers Me About The Component Architecture -- Ian Bicking
- abc
- traits from enthought
- colander
- django/sqlaclhemy models