Creando Decorator dentro de una clase en Python

Podemos crear fácilmente decoradores dentro de una clase y es fácilmente accesible para sus clases secundarias. Durante la creación de Decorator, debemos tener cuidado de que la función que estamos definiendo dentro del decorador debe tomar la referencia del objeto actual (self) como parámetro, y mientras accedemos a ese decorador desde la clase secundaria en ese momento debemos llamar a ese decorador usando la clase nombre (clase en la que Decorator está presente).

Ejemplo 1: Aquí, en este ejemplo, estamos creando una función decoradora dentro de la Clase A. Dentro de la Clase A, el método de instancia «fun1» está llamando a la función decoradora «Decorators» dentro de la Clase B «fun2». El método de instancia está llamando a la función de decorador de la Clase A. Para usar el decorador de la Clase A, debemos requerir el uso del nombre de Clase en el que el decorador está presente, por eso usamos «@A.Decorators» aquí.

Python3

# creating class A
class A :
    def Decorators(func) :
        def inner(self) :
            print('Decoration started.')
            func(self)
            print('Decoration of function completed.\n')
        return inner
  
    @Decorators
    def fun1(self) :
        print('Decorating - Class A methods.')
  
# creating class B
class B(A) :
    @A.Decorators
    def fun2(self) :
        print('Decoration - Class B methods.')
  
obj = B()
obj.fun1()
obj.fun2()

Producción:

Decoration started.
Decorating - Class A methods.
Decoration of function completed.

Decoration started.
Decoration - Class B methods.
Decoration of function completed.

Ejemplo 2: el número de verificación es par o impar usando Decorator.

Python3

class Check_no :
    
    # decorator function
    def decor(func) :            
        def check(self, no) :
            func(self, no)
            if no % 2 == 0 :
                print('Yes, it\'s EVEN Number.')
            else :
                print('No, it\'s ODD Number.')
        return check
  
    @decor
      
    #instance method
    def is_even(self, no) :            
        print('User Input : ', no)
  
obj = Check_no()
obj.is_even(45)
obj.is_even(2)
obj.is_even(7)

Producción:

User Input :  45
No, it's ODD Number.
User Input :  2
Yes, it's EVEN Number.
User Input :  7
No, it's ODD Number.

Ejemplo 3: Comprobación de la calificación a partir de las marcas.

Python3

# parent class
class Student :            
    
    # decorator function
    def decor(func) :                
        def grade(self,marks) :
            func(self,marks)
            if marks < 35 :
                print('Grade : F')
            elif marks < 50 :
                print('Grade : E')
            elif marks < 60 :
                print('Grade : D')
            elif marks < 70 :
                print('Grade : C')
            elif marks < 80 :
                print('Grade : B')
            elif marks < 100 :
                print('Grade : A')
        return grade
  
# child class
class Result(Student) :            
    @Student.decor
      
    # instance method
    def result(self,marks) :            
        print('Your Score : ',marks)
  
# creating object of parent class
obj = Result()        
obj.result(89) 
obj.result(34)

Producción:

Your Score :  89
Grade : A
Your Score :  34
Grade : F

Publicación traducida automáticamente

Artículo escrito por ronilpatil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *