[EMAIL PROTECTED] wrote:

> I wish to decorate all of the CX.func() in the same way.  One way to
> do this is to add a decorator to each of the derived classes.  But
> this is tedious and involves modifying multiple files.
> 
> Is there a way to modify the parent class and have the same effect?
> Or some other way neater than the above?
> 

Use a metaclass.

>>> def decorate(f):
        print "decorating", f
        return f

>>> class meta(type):
        def __init__(self, name, bases, dictionary):
                if 'func' in dictionary:
                        dictionary['func'] = decorate(dictionary['func'])
                type.__init__(self, name, bases, dictionary)

                
>>> class P(object):
        __metaclass__ = meta

        
>>> class C1(P):
        def func(self): pass

        
decorating <function func at 0x0119B370>
>>> 
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to