2010-04-24 71 views
5

如何添加裝飾器的方法到類中?我試圖如何添加一個裝飾器的方法到Python中的類?

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

    cls.update = update 

使用

add_decorator(MyClass) 

MyClass.update() 

但MyClass.update不具有裝飾

@dec並不適用於更新

我試圖用orm.reconstructor使用在sqlalchemy。

+0

我搞掂你的問題,以反映它好像你問之前 - 但如果我完全誤解了你的意圖,隨時回滾編輯並自己澄清。 – 2010-04-24 04:17:43

回答

6

如果你想在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

在代表你的SQL記錄類,

from sqlalchemy.orm import reconstructor 

class Thing(object): 
    @reconstructor 
    def reconstruct(self): 
     pass 
相關問題