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. Los campos obligatorios están marcados con *