Python динамически добавляет декоратор к методам класса, украшая класс

допустим, у меня есть класс:

class x:

    def first_x_method(self):
        print 'doing first_x_method stuff...'

    def second_x_method(self):
        print 'doing second_x_method stuff...'

и этот декоратор

class logger:
    @staticmethod
    def log(func):
        def wrapped(*args, **kwargs):
            try:
                print "Entering: [%s] with parameters %s" % (func.__name__, args)
                try:
                    return func(*args, **kwargs)
                except Exception, e:
                    print 'Exception in %s : %s' % (func.__name__, e)
            finally:
                print "Exiting: [%s]" % func.__name__
        return wrapped

как бы я написал другой декоратор otherdecorator так, чтобы:

@otherdecorator(logger.log)
class x:

    def first_x_method(self):
        print 'doing x_method stuff...'

    def first_x_method(self):
        print 'doing x_method stuff...'

то же самое, что

class x:
      @logger.log
      def first_x_method(self):
          print 'doing first_x_method stuff...'

      @logger.log
      def second_x_method(self):
        print 'doing second_x_method stuff...'

или фактически заменить

@otherdecorator(logger.log)
class x:

на

@otherdecorator 
class x:

где otherdecorator содержит всю функциональность. (Я не специалист по питону, так что будьте нежны)

9
задан Preet Sangha 30 March 2011 в 03:43
поделиться