Как добавить метод с декоратором к классу в Python? - PullRequest
5 голосов
/ 24 апреля 2010

Как добавить метод с декоратором в класс? Я пытался

def add_decorator( cls ):
    @dec
    def update(self):
        pass

    cls.update = update

использование

 add_decorator( MyClass )

 MyClass.update()

но MyClass.update не имеет декоратора

@ dec не применяется для обновления

Я пытаюсь использовать это с orm.reconstructor в sqlalchemy.

Ответы [ 2 ]

6 голосов
/ 24 апреля 2010

Если вы хотите декоратор класса в python> = 2.6, вы можете сделать это

def funkyDecorator(cls):
    cls.funky = 1

@funkyDecorator
class MyClass(object):
    pass

или в python 2.5

MyClass = funkyDecorator(MyClass)

Но похоже, что вы заинтересованы в декораторе метода, длячто вы можете сделать это

def logDecorator(func):

    def wrapper(*args, **kwargs):
        print "Before", func.__name__
        ret = func(*args, **kwargs)
        print "After", func.__name__
        return ret

    return wrapper

class MyClass(object):

    @logDecorator
    def mymethod(self):
        print "xxx"


MyClass().mymethod()

Вывод:

Before mymethod
xxx
After mymethod

Короче говоря, вы должны просто поставить @orm.reconstructor перед определением метода

0 голосов
/ 24 апреля 2010

В классе, который представляет вашу запись SQL,

from sqlalchemy.orm import reconstructor

class Thing(object):
    @reconstructor
    def reconstruct(self):
        pass
...