Función Python getattr()
Funciones integradas de Python3
getattr()Es una función integrada de Python que se utiliza para obtener el valor de un atributo de un objeto.
getattr()Nos permite acceder dinámicamente a los atributos de un objeto, en lugar de acceder estáticamente mediante el punto (.). Esto es muy útil cuando se manejan atributos desconocidos.
Glosario: getattr 是 get attribute(获取属性)的缩写。
Sintaxis básica y parámetros
Formato de sintaxis
getattr(object, name) getattr(object, name, default)
Descripción de parámetros
- Parámetro object:
- Tipo: cualquier objeto
- Descripción: el objeto del que se obtienen los atributos.
- Parámetro name:
- Tipo: cadena
- Descripción: el nombre del atributo.
- Parámetro default(Opcional):
- Tipo: cualquier valor
- Descripción: el valor predeterminado que se devuelve si el atributo no existe.
Descripción de la función
- Valor de retorno: Devuelve el valor del atributo.
- Excepción: Si el atributo no existe y no hay un valor predeterminado, se lanza AttributeError.
Ejemplos
Ejemplo 1: Uso básico
Ejemplo
class Person:
def __init__(self):
self.name = "Tom"
self.age = 20
p = Person()
# Obtener atributo
print(getattr(p, "name")) # Salida: Tom
print(getattr(p, "age")) # Salida: 20
# Usando punto
print(p.name) # Salida: Tom
def __init__(self):
self.name = "Tom"
self.age = 20
p = Person()
# Obtener atributo
print(getattr(p, "name")) # Salida: Tom
print(getattr(p, "age")) # Salida: 20
# Usando punto
print(p.name) # Salida: Tom
Resultado esperado al ejecutar:
Tom 20 Tom
Análisis del código:
- `getattr()` tiene el mismo efecto que el acceso con punto.
- La ventaja de `getattr()` es que se puede especificar el nombre del atributo con una cadena.
Ejemplo 2: Uso de valores predeterminados
Ejemplo
class Person:
def __init__(self):
self.name = "Tom"
p = Person()
# Obtener atributo existente
print(getattr(p, "name", "Desconocido")) # Salida: Tom
# Obtener atributo inexistente (con valor predeterminado)
print(getattr(p, "age", 0)) # Salida: 0
print(getattr(p, "city", "Pekín")) # Salida: Pekín
# Obtener atributo inexistente (sin valor predeterminado)
try:
print(getattr(p, "gender"))
except AttributeError as e:
print(f"El atributo no existe: {e}")
def __init__(self):
self.name = "Tom"
p = Person()
# Obtener atributo existente
print(getattr(p, "name", "Desconocido")) # Salida: Tom
# Obtener atributo inexistente (con valor predeterminado)
print(getattr(p, "age", 0)) # Salida: 0
print(getattr(p, "city", "Pekín")) # Salida: Pekín
# Obtener atributo inexistente (sin valor predeterminado)
try:
print(getattr(p, "gender"))
except AttributeError as e:
print(f"El atributo no existe: {e}")
Resultado esperado al ejecutar:
Tom 0 北京 属性不存在: 'Person' object has no attribute 'gender'
Análisis del código:
- El tercer parámetro proporciona un valor predeterminado y evita excepciones.
- Esto es útil al manejar atributos opcionales.
Ejemplo 3: Acceso dinámico
Ejemplo
# Seleccionar atributo dinámicamente
data = {"name": "Tom", "age": 20}
field = "name"
print(getattr(data, field)) # Acceder mediante cadena
# Combinar con setattr
class Person:
pass
p = Person()
# Establecer atributo dinámicamente
fields = ["name", "age", "city"]
values = ["Tom", 20, "Beijing"]
for field, value in zip(fields, values):
setattr(p, field, value)
# Obtener todos los atributos dinámicamente
for field in fields:
print(f"{field}: {getattr(p, field)}")
# hasattr combinado con getattr
if hasattr(p, "name"):
print(f"El nombre es: {getattr(p, 'name')}")
data = {"name": "Tom", "age": 20}
field = "name"
print(getattr(data, field)) # Acceder mediante cadena
# Combinar con setattr
class Person:
pass
p = Person()
# Establecer atributo dinámicamente
fields = ["name", "age", "city"]
values = ["Tom", 20, "Beijing"]
for field, value in zip(fields, values):
setattr(p, field, value)
# Obtener todos los atributos dinámicamente
for field in fields:
print(f"{field}: {getattr(p, field)}")
# hasattr combinado con getattr
if hasattr(p, "name"):
print(f"El nombre es: {getattr(p, 'name')}")
Resultado de la ejecución:
Al ejecutarlo en un entorno real, se mostrarán los atributos establecidos dinámicamente.
getattr()Es una función muy importante en la programación dinámica de Python.
Funciones integradas de Python3
Otras extensiones