isinstance en Python

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.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.