Python | método getattr()

La función getattr() de Python se utiliza para acceder al valor del atributo de un objeto y también ofrece la opción de ejecutar el valor predeterminado en caso de que la clave no esté disponible.

Sintaxis: getattr(obj, clave, definición)

Parámetros: 

  • obj: el objeto cuyos atributos deben procesarse.
  • clave: el atributo del objeto
  • def: el valor predeterminado que debe imprimirse en caso de que no se encuentre el atributo.

Devuelve: valor del objeto si el valor está disponible, valor predeterminado en caso de que el atributo no esté presente 
y devuelve AttributeError en caso de que el atributo no esté presente y el valor predeterminado no esté 
especificado. 

Cómo funciona getattr() en Python

Ejemplo 1: demostración del funcionamiento de getattr() 

Python3

# Python code to demonstrate
# working of getattr()
 
# declaring class
class GfG:
    name = "GeeksforGeeks"
    age = 24
 
# initializing object and
# python getattr() function call
obj = GfG()
 
# use of getattr
print("The name is " + getattr(obj, 'name'))
 
# use of getattr with default
print("Description is " + getattr(obj,
                                  'description',
                                  'CS Portal'))
 
# use of getattr without default
print("Motto is " + getattr(obj, 'motto'))

Producción: 

The name is GeeksforGeeks
Description is CS Portal

Excepción: 

AttributeError: GfG instance has no attribute 'motto'

Ejemplo 2: getattr() cuando no se encuentra el atributo nombrado

Python3

# Python code to demonstrate
# working of getattr()
 
# declaring class
class GfG:
    name = "GeeksforGeeks"
    age = 24
 
 
# initializing object
obj = GfG()
 
# use of getattr without default
print("Gender is " + getattr(obj, 'gender'))

Producción:

AttributeError: 'GfG' object has no attribute 'gender'

 Ejemplo 3: análisis de rendimiento y getattr python con parámetro

Python3

# Python code to demonstrate
# performance analysis of getattr()
import time
 
# declaring class
class GfG:
    name = "GeeksforGeeks"
    age = 24
 
# initializing object
obj = GfG()
 
# use of getattr to print name
start_getattr = time.time()
print("The name is " + getattr(obj, 'name'))
print("Time to execute getattr " + str(time.time() - start_getattr))
 
# use of conventional method to print name
start_obj = time.time()
print("The name is " + obj.name)
print("Time to execute conventional method " + str(time.time() - start_obj))

Producción: 

The name is GeeksforGeeks
Time to execute getattr 5.0067901611328125e-06
The name is GeeksforGeeks
Time to execute conventional method 1.1920928955078125e-06

Ejemplo 4: valor predeterminado de getattr Python

Python3

# Python code to demonstrate
# working of getattr()
 
# declaring class
class GfG:
    name = "GeeksforGeeks"
    age = 24
 
# initializing object
obj = GfG()
 
# use of getattr without default
print("Motto is " + getattr(obj, 'motto'))

Producción:

AttributeError: 'GfG' object has no attribute 'motto'

Ejemplo 5: Llamada a la función getattr() de Python

Python3

# Python code to demonstrate
# working of getattr()
 
# declaring class
class GfG:
     
    def __init__(self, name, age):
        self.name = name
        self.age = age
 
    def call(self, x):
        print(f"{self.name} called with parameters '{x}'")
        return
 
# initializing object
obj = GfG("Vivek", 10)
print(obj)
print(GfG)
print(getattr(obj,'call'))
 
getattr(obj,'call')('arg')

Producción:

<__main__.GfG object at 0x0000023C1ED92748>
<class '__main__.GfG'>
<bound method GfG.call of <__main__.GfG object at 0x0000023C1ED92748>>
Vivek called with parameters 'arg'

Resultado: el método convencional lleva menos tiempo que getattr(), pero cuando se deben usar valores predeterminados en caso de que falten atributos, getattr() es una buena opción.

Aplicaciones: Son muchas las aplicaciones de getattr(), algunas de ellas ya mencionadas en casos de ausencia de atributos de objetos, en desarrollos web donde algunos de los atributos del formulario son opcionales. También es útil en los casos de colecciones de funciones de aprendizaje automático en caso de que algunas funciones falten en la recopilación de datos.

Publicación traducida automáticamente

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