2010-04-24 32 views
5

Làm cách nào để thêm phương thức với trình trang trí cho một lớp học? Tôi cố gắngLàm cách nào để thêm phương thức với trình trang trí vào một lớp trong python?

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

    cls.update = update 

sử dụng

add_decorator(MyClass) 

MyClass.update() 

nhưng MyClass.update không có trang trí

@dec không áp dụng để cập nhật

Tôi đang cố gắng sử dụng điều này với orm.reconstructor trong sqlalchemy.

+0

Tôi cố định lên câu hỏi của bạn để phản ánh những gì nó có vẻ như bạn đã yêu cầu - nhưng nếu tôi hoàn toàn đã hiểu sai ý định của bạn, vui lòng quay lại bản chỉnh sửa và tự làm rõ. –

Trả lời

6

Nếu bạn muốn trang trí lớp học trong python> = 2,6 bạn có thể làm

def funkyDecorator(cls): 
    cls.funky = 1 

@funkyDecorator 
class MyClass(object): 
    pass 

hoặc trong python này 2,5

MyClass = funkyDecorator(MyClass) 

Nhưng có vẻ như bạn quan tâm đến trang trí phương pháp, bạn có thể làm điều này

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() 

Output:

Before mymethod 
xxx 
After mymethod 

Vì vậy, trong ngắn bạn phải chỉ cần đặt @orm.reconstructor trước khi định nghĩa phương pháp

0

Trong lớp đại diện kỷ lục SQL của bạn,

from sqlalchemy.orm import reconstructor 

class Thing(object): 
    @reconstructor 
    def reconstruct(self): 
     pass 
Các vấn đề liên quan