class Gato:
especie = "Mamífero" # atributo de clase, se usa para atributos constantes para todos los objetos
def __init__(self, nombre, edad):
self.nombre = nombre # los atributos que están dentro del constructor son atributos de instancia
self.edad = edad # eso supone que cada objeto instanciado tiene sus propios atributos
self.alimentos = [] # un gato puede tener una edad, otro otra, o diferentes alimentos favoritos
def verEtapa(self):
if self.edad > 1:
print(self.nombre, "es adulto")
else:
print(self.nombre, "es cachorro")
def esAlimento(self, alimento):
return alimento in self.alimentos
g = Gato('Gufi', 0.5)
g.verEtapa()
Gufi es cachorro
m = Gato('Mafi', 3)
m.verEtapa()
Mafi es adulto
La lista de alimentos favoritos es propia de cada objeto gato.
g.alimentos.append("Sardinas") # como es una lista puedo usar append
g.alimentos
['Sardinas']
g.esAlimento("Sardinas")
True
m.alimentos.append("Natillas") # al otro gato le gustan las natillas
g.alimentos.append("Leche") # al cachorro le gusta la leche
print(g.alimentos)
print(m.alimentos)
['Sardinas', 'Leche'] ['Natillas']
g.esAlimento("Horchata")
False
g.edad += 1 # podemos acceder y modificar los atributos de instancia
g.verEtapa()
Gufi es adulto
No es necesario un objeto para obtenerlos. Podemos poner Gato.especie y funciona.
m.especie
'Mamífero'
g.especie
'Mamífero'
Gato.especie # con los atributos de clase podemos poner la clase y el atributo y funciona
'Mamífero'
Podemos crear atributos fuera de la clase, de forma dinámica, pero no se guardarán en la clase y cuando se reinicie el kernel no se recordarán.
g.raza = "Siamés" # en Python los atributos se pueden crear de forma dinámica
g.raza # podemos consultar el atributo, pero no se guarda
'Siamés'
Gato.pelaje = "suave" # también funciona con los atributos de clase, nos inventamos una nuevo
Gato.pelaje # podemos consultar el atributo inventado, pero no se guardará
'suave'