Hola a todos, hoy os voy a explicar como funciona la función isinstance en Python.
Cuando estamos en POO y usamos herencia, es normal que necesitamos saber si una instancia es de una clase en concreto. Esto lo hacemos con isinstance.
Es una función donde le pasamos el objeto y el nombre de la clase y nos indicara si esta es o no instancia de la clase indicada, devolviendo un booleano.
Os dejo la estructura de clases que solemos usar para estos ejemplos:
class Vehiculo: matricula = "" marca = "" modelo = "" def __init__(self, matricula, marca, modelo): self.matricula = matricula self.marca = marca self.modelo = modelo def getMatricula(self): return self.matricula def setMatricula(self, value): self.matricula = value def getMarca(self): return self.marca def setMarca(self, value): self.marca = value def getModelo(self): return self.modelo def setModelo(self, value): self.modelo = value def arrancar(self): print("Arrancando el vehiculo...") class Moto(Vehiculo): sidecar = False def __init__(self, matricula, marca, modelo, sidecar): super().__init__(matricula, marca, modelo) self.sidecar = sidecar def getSidecar(self): return self.sidecar def setSidecar(self, value): self.sidecar = value def arrancar(self): print("Arrancando la moto...") class Coche(Vehiculo): aire_acondicionado = False def __init__(self, matricula, marca, modelo, aire_acondicionado): super().__init__(matricula, marca, modelo) self.aire_acondicionado = aire_acondicionado def getAireAcondicionado(self): return self.aire_acondicionado def setAireAcondicionado(self, value): self.aire_acondicionado = value def arrancar(self): print("Arrancando el coche...")
Por ejemplo, si queremos contar cuantos coches, motos y vehiculos tenemos en una lista, podríamos hacer algo como esto:
numMotos=0 numCoches=0 numVeh=0 vehiculos = [ Moto("1111AAAA", "VESPA ", "125N", True), Coche("2222AAAA", "SEAT", "IBIZA", True), Moto("1111BBB", "VESPA ", "100A", False), Coche("2222BBB", "PEUGEOT", "206", False), Moto("1111CCC", "VESPA ", "200C", True), Vehiculo("3333DDDD", "matricula", "marca") ] for v in vehiculos: if isinstance(v, Moto): numMotos = numMotos + 1 if isinstance(v, Coche): numCoches = numCoches + 1 if isinstance(v, Vehiculo): numVeh = numVeh + 1 print("Numero de coches: " , numCoches) print("Numero de motos: " , numMotos) print("Numero de vehiculos: " , numVeh)
Este es el resultado:
Fíjate que vehículos tenemos 6, ya que una moto y un coche «es un» Vehiculo.
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta