[Python-Dev] @decoration of classes

Phillip J. Eby pje at telecommunity.com
Tue Mar 29 04:44:59 CEST 2005


At 07:55 PM 3/28/05 -0500, Jack Diederich wrote:
>For compelling, I think the code smell put off by the "no conflict" metaclass
>generator recipe (which also appeared in Alex Martelli's PyCon talk) is fairly
>compelling from a duck typing point of view.
>
># would you rather
>class K:
>   __metaclass__ = no_conflict(MetaA, MetaB)
># or
>@decoA
>@decoB
>class K: pass

Actually, it's possible today with:

class K:
     decoB()
     decoA()

As long as decoA() and decoB() use the "class advisor" mechanism I built 
for Zope and PyProtocols.

That mechanism basically sticks a custom __metaclass__ into the enclosing 
class, and implements a simple protocol for chaining subsequently-defined 
class advisors.  See 'protocols.advice' in PyProtocols or 
'zope.interface.advice' in Zope or Twisted for details.

Anyway, I'm not certain that moving these functions up to decorator status 
will really do anything useful; you can already put them near the top of 
the class definition, such that they're relatively prominent.



More information about the Python-Dev mailing list