2010-04-24 26 views
5

मैं एक सजावट के साथ एक वर्ग में एक विधि कैसे जोड़ूं? मैंमैं एक सजावट के साथ अजगर में एक वर्ग में एक विधि कैसे जोड़ूं?

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

    cls.update = update 

उपयोग

add_decorator(MyClass) 

MyClass.update() 

की कोशिश की लेकिन MyClass.update डेकोरेटर

@dec

मैं orm.reconstructor के साथ इस का उपयोग करने के कोशिश कर रहा हूँ अद्यतन करने के लिए लागू नहीं किया था नहीं है sqlalchemy में।

+0

मैं प्रतिबिंबित करने के लिए यह क्या लगता है जैसे आप पूछ रहे थे अपने प्रश्न तय करने से पहले @orm.reconstructor डाल करने के लिए किया है - लेकिन अगर मैं पूरी तरह से अपने इरादे की गलत व्याख्या की, संपादन को वापस रोल करने के लिए स्वतंत्र महसूस करें और इसे स्वयं स्पष्ट करें। –

उत्तर

6

आप अजगर में वर्ग डेकोरेटर> = 2.6 आप इस

def funkyDecorator(cls): 
    cls.funky = 1 

@funkyDecorator 
class MyClass(object): 
    pass 

या में अजगर कर सकते हैं चाहते हैं 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 
संक्षेप में

तो आप बस विधि परिभाषा

0

वर्ग है कि अपने एसक्यूएल रिकॉर्ड का प्रतिनिधित्व करता है में,

from sqlalchemy.orm import reconstructor 

class Thing(object): 
    @reconstructor 
    def reconstruct(self): 
     pass 
संबंधित मुद्दे