CodeGym /Curso de Java /Python SELF ES /Chequeo de tipos

Chequeo de tipos

Python SELF ES
Nivel 16 , Lección 3
Disponible

9.1 Función type()

En Python hay varias funciones integradas para chequear tipos y clases de objetos. Estas funciones son útiles para escribir código flexible y seguro, que pueda trabajar con diferentes tipos de datos.

A continuación te hablaré de las más populares: type(), isinstance(), issubclass(), así como funciones para la anotación de tipos, como getattr() y hasattr().

Función type()

La función type() devuelve el tipo de un objeto. Ya has trabajado con ella, ¿verdad?


x = 10
print(type(x))  # Salida: <class 'int'>

Pero lo que probablemente no sabes es que también puedes crear nuevos clases con ella!

Creación de una nueva clase

Si le pasas tres argumentos, creará un nuevo tipo (clase).

La firma de esta operación es:


type(name, bases, dict)

donde:

  • name — el nombre de la clase que se crea (cadena).
  • bases — una tupla de clases base (padres), de las cuales la nueva clase heredará.
  • dict — un diccionario que contiene los atributos y métodos de la nueva clase.

Creación de una clase simple:


MyClass = type('MyClass', (), {'say_hello': lambda self: print("Hello!")})

# Creamos una instancia de la clase
instance = MyClass()
instance.say_hello()  # Salida: Hello!

Incluso puedes crear algo más complejo:


MyClass = type('MyClass', (), {
    'attribute': 42,
    '__init__': lambda self, value: setattr(self, 'value', value),
    'display_value': lambda self: print(self.value)
})
            
# Creamos una instancia de la clase
instance = MyClass(10)
print(instance.attribute)  # Salida: 42
instance.display_value()  # Salida: 10

Así que ahora no solo puedes determinar el tipo de un objeto, sino también crear una clase, hacerle objetos y luego determinar sus tipos.

9.2 Función isinstance()

Función isinstance() es una función incorporada en Python usada para verificar si un objeto pertenece a una clase específica o a una tupla de clases. Retorna True si el objeto es una instancia de la clase especificada o cualquiera de las clases especificadas en la tupla, y False en caso contrario.

Firma y parámetros:


isinstance(object, classinfo)

donde:

  • object — el objeto cuya pertenencia a la clase o clases necesitas verificar.
  • classinfo — clase, tipo o tupla de clases y tipos contra los cuales se verificará el objeto.

Ejemplos de uso:

Verificación de pertenencia a una clase


x = 10
print(isinstance(x, int))  # Salida: True
            
y = "Hello"
print(isinstance(y, str))  # Salida: True

Verificación de pertenencia a múltiples clases — al menos a una de:


x = 10
print(isinstance(x, (int, float)))  # Salida: True
            
y = "Hello"
print(isinstance(y, (int, str)))  # Salida: True
            
z = 3.14
print(isinstance(z, (int, str)))  # Salida: False

Verificación de pertenencia a clases personalizadas


class Animal:
    pass
        
class Dog(Animal):
    pass
        
dog = Dog()
        
print(isinstance(dog, Dog))  # Salida: True
print(isinstance(dog, Animal))  # Salida: True

A diferencia de la comparación directa de tipos usando type(), isinstance() trabaja correctamente con la herencia, verificando la pertenencia de un objeto a cualquier clase en la jerarquía.

9.3 Función issubclass()

Función issubclass() es una función incorporada en Python que se utiliza para verificar si una clase es una subclase de otra clase o de cualquiera de las clases en una tupla. Esta función devuelve True si el primer argumento es de hecho una subclase del segundo, y False en caso contrario.

Firma y parámetros:


issubclass(class, classinfo)

donde:

  • class — la clase cuya pertenencia a otra clase o clases necesitas verificar.
  • classinfo — clase, tipo o tupla de clases y tipos contra los cuales se verificará el primer argumento.

Ejemplos de uso:

Verificación de pertenencia a una clase



class Animal:
    pass
         
class Dog(Animal):
    pass
        
print(issubclass(Dog, Animal))  # Salida: True
print(issubclass(Animal, Dog))  # Salida: False 

Verificación de pertenencia a múltiples clases — al menos a una de:


class Animal:
    pass
        
class Dog(Animal):
    pass
        
class Cat(Animal):
    pass
        
print(issubclass(Dog, (Animal, Cat)))  # Salida: True
print(issubclass(Dog, (Cat,)))  # Salida: False

Ejemplos con clases personalizadas

Herencia de clases integradas


class MyInt(int):
    pass
        
print(issubclass(MyInt, int))  # Salida: True
print(issubclass(int, MyInt))  # Salida: False

Jerarquía de herencia


class A:
    pass
        
class B(A):
    pass
        
class C(B):
    pass
        
print(issubclass(C, A))  # Salida: True
print(issubclass(C, B))  # Salida: True
print(issubclass(B, A))  # Salida: True
print(issubclass(A, C))  # Salida: False

Ventajas de usar issubclass()

Verificación de jerarquía de clases: issubclass() permite verificar la jerarquía de clases, lo cual es útil para asegurar la corrección de la herencia y la estructura del código.

Flexibilidad: La función soporta la verificación de una clase o una tupla de clases, lo que la hace flexible para su uso en diversos escenarios.

Comodidad para metaprogramación: issubclass() se usa frecuentemente en metaprogramación y al escribir código que trabaja con tipos y clases dinámicos. Pero eso lo veremos más adelante :)

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION