At 01:19 PM 8/15/2006 +1200, Greg Ewing wrote: >Phillip J. Eby wrote: > > > The examples there are very short >>and simple; in fact the complete Message implementation, including >>imports and overload declarations is only *6 lines long*. >>So, my only guess is that the people who looked at that skimmed right >>past it, looking for something more complicated! > >If it really is that short and simple, why not just post >the whole thing? Then there's no danger of anyone getting >lost in parts of the documentation they're not supposed >to be looking at.
Here are the most relevant bits excerpted from the text: To create a new kind of metadata, we need to create a class that represents the metadata, and then add a method to the ``binding.declareAttribute()`` generic function. For our example, we'll create a ``Message`` metadata type that just prints a message when the metadata is registered:: >>> class Message(str): ... pass >>> def print_message(classobj, attrname, metadata): ... print metadata, "(%s.%s)" % (classobj.__name__, attrname) >>> binding.declareAttribute.addMethod(Message,print_message) Now, we'll see if it works:: >>> class Foo: pass >>> binding.declareAttribute(Foo, 'bar', Message("testing")) testing (Foo.bar) In addition to defining your own metadata types, ``declareAttribute()`` has built-in semantics for ``None`` and sequence types. The former is a no-op, and the latter re-invokes ``declareAttribute()`` on the sequence contents:: >>> binding.declareAttribute(Foo, 'baz', ... [Message('test1'), Message('test2')] ... ) test1 (Foo.baz) test2 (Foo.baz) >>> binding.declareAttribute(Foo, 'spam', None) # no-op _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com