Documentación sobre funciones integradas (Built-in Functions)
Permite obtener el valor de un atributo, o si no existe se obtiene un valor por defecto.
Sintaxis:
el valor por defecto es optativo.
class PuntoVenta: # Un pequeño punto de venta
empleados = 1 # Todas las instancias inicialmente nacen con 1 empleado
cafetera = True # Todos los objetos nacen con cafetera
mesas = 6 # La dotación inicial es de 6 mesas
terraza = False # Estos pequeños puntos de venta inicialmente no tienen terraza
pv1 = PuntoVenta() # creamos el punto de venta pv1 poniendo paréntesis
pv2 = PuntoVenta # creamos el punto de venta pv2 sin poner paréntesis
pv1.mesas # poniendo objeto.atributo accedemos al atributo
6
getattr(pv1,'mesas',4) # con getattr tb accedemos al atributo, el valor por defecto 4 no actúa, pq existe mesas
6
# si no hay atributo sillas, queremos que aparezca en la dotación del Puno de venta que hay 4 sillas por mesa
getattr(pv1,'sillas', 4*pv1.mesas) # aquí si actúa el valor por defecto porque no existe el atributo sillas
24
Permite establecer el valor de un atributo.
Sintaxis:
setattr(pv1, "mesas", 8) # establecemos el valor de un atributo
pv1.mesas # antes había 6 mesas y ahora hay 8 mesas
8
Permite comprobar si el objeto tiene el atributo presente o no. Devuelve verdadero si el objeto tiene el atributo indicado y falso si no lo tiene.
Sintaxis:
print('¿El punto de venta tiene mesas?', hasattr(pv1, "mesas"))
¿El punto de venta tiene mesas? True
print('¿El punto de venta tiene cafetera?', hasattr(pv1, "cafetera"))
¿El punto de venta tiene cafetera? True
print('¿El punto de venta tiene terraza?', hasattr(pv1, "terraza")) # OJO. El punto de venta no tiene terraza.
¿El punto de venta tiene terraza? True
print('¿El punto de venta tiene aseo?', hasattr(pv1, "aseo"))
¿El punto de venta tiene aseo? False
Elimina un atributo del objeto.
Sintaxis:
OJO: se ha de poner la clase, no el objeto
pv1.cafetera
True
delattr(PuntoVenta, 'cafetera') # elimina el atributo
dir(pv1) # podemos comprobar que nuestro objeto no tiene el atributo cafetera
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'empleados', 'mesas', 'terraza']
dir(pv2) # podemos comprobar que pv2 tampoco tiene el atributo cafetera
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'empleados', 'mesas', 'terraza']
PuntoVenta.__dict__ # nos proporciona información de la clase, vemos que no hay cafetera
mappingproxy({'__module__': '__main__', 'empleados': 1, 'mesas': 6, 'terraza': False, '__dict__': <attribute '__dict__' of 'PuntoVenta' objects>, '__weakref__': <attribute '__weakref__' of 'PuntoVenta' objects>, '__doc__': None})