reflexión en Python

La reflexión se refiere a la capacidad del código para examinar los atributos de los objetos que se pueden pasar como parámetros a una función. Por ejemplo, si escribimos type(obj), Python devolverá un objeto que representa el tipo de obj.

Usando la reflexión, podemos escribir una función inversa recursiva que funcione para strings, listas y cualquier otra secuencia que admita el corte y la concatenación. Si un obj es una referencia a una string, Python devolverá el objeto de tipo str. Además, si escribimos str() obtenemos una string que es la string vacía. En otras palabras, escribir str() es lo mismo que escribir “”. Del mismo modo, escribir list() es lo mismo que escribir [].

# Python program to illustrate reflection 
def reverse(sequence): 
    sequence_type = type(sequence) 
    empty_sequence = sequence_type() 
      
    if sequence == empty_sequence: 
        return empty_sequence 
      
    rest = reverse(sequence[1:]) 
    first_sequence = sequence[0:1] 
      
    # Combine the result 
    final_result = rest + first_sequence
      
    return final_result 
  
# Driver code 
print(reverse([10, 20, 30, 40])) 
print(reverse("GeeksForGeeks")) 

Producción:

[40, 30, 20, 10]
skeeGroFskeeG

Funciones que permiten la reflexión

Las funciones que permiten la reflexión incluyen type(), isinstance(), callable(), dir() y getattr().

  1. type and isinstance – Consulte aquí
  2. Callable() : Un callable significa cualquier cosa a la que se pueda llamar. Para un objeto, determina si se puede llamar. Se puede hacer que se pueda llamar a una clase proporcionando un método __call__(). El método callable() devuelve True si el objeto pasado parece invocable. Si no, devuelve False.
    Ejemplos:
    x = 5
    
    def testFunction():
      print("Test")
       
    y = testFunction
    
    if (callable(x)):
        print("x is callable")
    else:
        print("x is not callable")
    
    if (callable(y)):
        print("y is callable")
    else:
        print("y is not callable")
    

    Producción:

    x is not callable
    y is callable

    invocable cuando se usa en programación orientada a objetos

    class Foo1:
      def __call__(self):
        print('Print Something')
    
    print(callable(Foo1))
    

    Producción:

    True
  3. Dir: el método dir() intenta devolver una lista de atributos válidos del objeto. El dir() intenta devolver una lista de atributos válidos del objeto.
      Si el objeto tiene el método __dir__(), se llamará al método y debe devolver la lista de atributos.
      Si el objeto no tiene el método __dir()__, este método intenta encontrar información del atributo __dict__ (si está definido) y del tipo de objeto. En este caso, la lista devuelta por dir() puede no estar completa.

Ejemplos:

number = [1,2,3]
print(dir(number))

characters = ["a", "b"]
print(dir(number))

Producción:

  • Getattr: el método getattr() devuelve el valor del atributo nombrado de un objeto. Si no se encuentra, devuelve el valor predeterminado proporcionado a la función. El método getattr toma tres parámetros objeto , nombre y predeterminado (opcional).
    class Employee:
        salary = 25000
        company_name= "geeksforgeeks"
    
    employee = Employee()
    print('The salary is:', getattr(employee, "salary"))
    print('The salary is:', employee.salary)

    Producción:

    The salary is: 25000
    The salary is: 25000
  • Enlaces de referencia
    2. docs_python
    3. wikibooks

    Este artículo es una contribución de Subhajit Saha . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

    Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

    Publicación traducida automáticamente

    Artículo escrito por GeeksforGeeks-1 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 *