The Relation objects need to be created before the classes are created.
Not any more!
There needs to be a call that tells the Relation about all the classes that participate in the Relation. (Maybe it could be done when the classes are created via a custom metaclass, but that seems to messy.)
There's a way to allow a descriptor (or other thing defined inside a class suite) to do things to the class immediately after the class is created. Phillip Eby has checked code inspired by my prototype, in turn inspired by a conversation I had with GvR. (That's the credits out of the way :-) ): It is available from Phillip's PEAK project, and will probably be checked into Zope 3 soon also. http://cvs.eby-sarna.com/PEAK/src/peak/util/advice.py?rev=HEAD&content-type=... And here are some unit tests for it: http://cvs.eby-sarna.com/PEAK/src/peak/util/tests/advice.py?rev=HEAD&content... Using the API looks like this: def implements(*interfaces): def callback(klass): klass.__implements__ = interfaces return klass addClassAdvisor(callback) class Foo: implements(IFoo) This adds an __implements__ attribute to the class just after it has been created, but before any other code gets to see it. -- Steve Alexander