Site Tools


python:decorators

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
python:decorators [2024/08/31 10:55] – Nielspython:decorators [2024/09/30 08:09] (current) – Niels
Line 2: Line 2:
  
 Decorators extend functions, methods, classes without explicitly modifying the code of the item being decorated.  Decorators extend functions, methods, classes without explicitly modifying the code of the item being decorated. 
 +
 +example of a decorator //Italic (skelleton structure only)//:
 +
 +<code python>
 +def decorator_function(func):
 +    ''' Receives the function being decorated as first argument'''
 +    
 +    def actual_decorator(*args, **kwargs): 
 +        '''function that actually performs the decorated logic '''
 +        
 +        # do something, before original logic
 +                
 +        #call the original function        
 +        func(*args,**kwargs)
 +        
 +        # and/or do something after. 
 +        
 +        #return result 
 +    
 +    #return the actual decorator so it gets called by calling context . 
 +    return actual_decorator   
 +
 +</code>
 +
 +example of decorator with arguments//Italic (skelleton structure only)//:
 +
 +<code python>
 +def decorator_function(a, b):
 +    ''' Receives the decorator arguments'''
 +    
 +    def additional_wrapper(func):
 +        ''' receivs the function (and its arguments) being decorated '''
 +    
 +        def actual_decorator(*args, **kwargs): 
 +            '''function that actually performs the decorated logic '''
 +            
 +            #arguments a and b passed from outer fuction are in scope but read only. 
 +               if a > b:
 +                   pass         
 +            # do something, before original logic                      
 +            
 +            #call the original function            
 +            func(*args,**kwargs)
 +            
 +            # and/or do something after. 
 +            
 +            #return result
 +        
 +        # return function to calling context (so that it gets executed).    
 +        return actual_decorator   
 +
 +    #return fuction to calling context (so that it gets executed).
 +    return additional_wrapper
 +</code>
  
  
Line 9: Line 63:
   *[[https://wiki.python.org/moin/PythonDecorators| PythonDecorators (wiki.python.org)]]   *[[https://wiki.python.org/moin/PythonDecorators| PythonDecorators (wiki.python.org)]]
   *[[https://builtin.com/software-engineering-perspectives/python-class-decorator| Using Python Class Decorators (builtin.com)]]   *[[https://builtin.com/software-engineering-perspectives/python-class-decorator| Using Python Class Decorators (builtin.com)]]
-  * [[https://realpython.com/python-metaclasses/| Python Metaclasses (realpython.com)]]((With metaclasses you can define how classes are created.))+  *[[https://realpython.com/python-metaclasses/| Python Metaclasses (realpython.com)]]((With metaclasses you can define how classes are created.)) 
 +  *[[https://realpython.com/primer-on-python-decorators/| Primer on Python decorators (realpython.com)]] 
 +  *[[https://python-reference.readthedocs.io/en/latest/docs/functions/property.html | article on property decorator]]
        
  
 {{tag>python development decorators}} {{tag>python development decorators}}
  
python/decorators.1725094507.txt.gz · Last modified: by Niels