logo

escriba e isinstance en Python

En este artículo, cubriremos sobre función type() e isinstance() en Pitón y ¿cuáles son las diferencias entre tipo() y esinstancia() .

¿Qué es el tipo en Python?

Python tiene un método incorporado llamado tipo que generalmente resulta útil para determinar el tipo de variable utilizada en el programa en tiempo de ejecución. El forma canónica de comprobar el tipo de entrada Pitón se da a continuación:

Sintaxis de la función type()

type(object) type(name, bases, dict)>

Ejemplo 1: Ejemplo de tipo() con un parámetro de objeto único

En este ejemplo, intentamos verificar el tipo de datos de cada variable, como x, s e y usando función tipo() .



Python3




# Python code type() with a single object parameter> x>=> 5> s>=> 'geeksforgeeks'> y>=> [>1>,>2>,>3>]> print>(>type>(x))> print>(>type>(s))> print>(>type>(y))>

>

>

Producción:

class 'int' class 'str' class 'list'>

Ejemplo 2: Ejemplo de tipo() con un nombre, bases y parámetro dict

Si necesita verificar el tipo de un objeto, se recomienda utilizar Python función isinstance() en cambio. Es porque la función isinstance() también verifica si el objeto dado es una instancia de la subclase.

Python3


cadena de concatenación en java



# Python code for type() with a name,> # bases and dict parameter> o1>=> type>(>'X'>, (>object>,),>dict>(a>=>'Foo'>, b>=>12>))> print>(>type>(o1))> print>(>vars>(o1))> class> test:> >a>=> 'Foo'> b>=> 12> o2>=> type>(>'Y'>, (test,),>dict>(a>=>'Foo'>, b>=>12>))> print>(>type>(o2))> print>(>vars>(o2))>

>

>

Producción:

{'b': 12, 'a': 'Foo', '__dict__': , '__doc__': None, '__weakref__': } {'b': 12, 'a': 'Foo', '__doc__': None}>

¿Qué es isinstance() en Python?

La función isinstance() comprueba si el objeto (primer argumento) es una instancia o subclase de la clase de información de clase (segundo argumento).

Sintaxis de la función isinstance()

Sintaxis: es instancia (objeto, información de clase)

Parámetro:

  • objeto: objeto a comprobar
  • classinfo: clase, tipo o tupla de clases y tipos

Devolver: true si el objeto es una instancia o subclase de una clase, o cualquier elemento de la tupla false en caso contrario.

Si la información de clase no es un tipo o una tupla de tipos, se genera una excepción TypeError.

Ejemplo 1:

En este ejemplo, veremos la prueba isinstance() para el objeto de clase.

Python3




# Python code for isinstance()> class> Test:> >a>=> 5> TestInstance>=> Test()> print>(>isinstance>(TestInstance, Test))> print>(>isinstance>(TestInstance, (>list>,>tuple>)))> print>(>isinstance>(TestInstance, (>list>,>tuple>, Test)))>

>

>

Producción:

True False True>

Ejemplo 2:

En este ejemplo, veremos la prueba isinstance() para el objeto entero, flotante y de cadena.

Python3




weight>=> isinstance>(>17.9>,>float>)> print>(>'is a float:'>, weight)> num>=> isinstance>(>71>,>int>)> print>(>'is an integer:'>, num)> string>=> isinstance>(>'Geeksforgeeks'>,>str>)> print>(>'is a string:'>, string)>

>

>

Producción:

is a float: True is an integer: True is a string: True>

Ejemplo 3:

En este ejemplo, veremos la prueba isinstance() para el tupla , lista , diccionario , y colocar objeto.

Python3




tuple1>=> isinstance>((>'A'>,>'B'>,>'C'>),>tuple>)> print>(>'is a tuple:'>, tuple1)> set1>=> isinstance>({>'A'>,>'B'>,>'C'>},>set>)> print>(>'is a set:'>, set1)> list1>=> isinstance>([>'A'>,>'B'>,>'C'>],>list>)> print>(>'is a list:'>, list1)> dict1>=> isinstance>({>'A'>:>'1'>,>'B'>:>'2'>,>'C'>:>'3'>},>dict>)> print>(>'is a dict:'>, dict1)>

>

>

Producción:

is a tuple: True is a set: True is a list: True is a dict: True>

¿Cuáles son las diferencias entre tipo() e isinstance()?

Un error elemental que comete la gente es utilizar la función type() donde isinstance() sería más apropiado.

  • Si está verificando si un objeto tiene un tipo determinado, desea usar isinstance() ya que verifica si el objeto pasado en el primer argumento es del tipo de cualquiera de los objetos de tipo pasados ​​en el segundo argumento. Por lo tanto, funciona como se esperaba con subclases y clases de estilo antiguo, todas las cuales tienen la instancia de objeto de tipo heredado.
  • type(), por otro lado, simplemente devuelve el tipo de objeto de un objeto, y al comparar lo que devuelve con otro tipo de objeto solo se obtendrá True cuando se utiliza exactamente el mismo tipo de objeto en ambos lados. En Python, es preferible utilizar Duck Typing (la verificación de tipos se difiere al tiempo de ejecución y se implementa mediante escritura dinámica o reflexión) en lugar de inspeccionar el tipo de un objeto.

Python3




# Python code to illustrate duck typing> class> User(>object>):> >def> __init__(>self>, firstname):> >self>.firstname>=> firstname> >@property> >def> name(>self>):> >return> self>.firstname> class> Animal(>object>):> >pass> class> Fox(Animal):> >name>=> 'Fox'> class> Bear(Animal):> >name>=> 'Bear'> # Use the .name attribute (or property) regardless of the type> for> a>in> [User(>'Geeksforgeeks'>), Fox(), Bear()]:> >print>(a.name)>

>

>

Producción:

Geeksforgeeks Fox Bear>
  • La siguiente razón para no usar type() es la falta de soporte para la herencia .

Python3




# python code to illustrate the lack of> # support for inheritance in type()> class> MyDict(>dict>):> >'''A normal dict, that is always created with an 'initial' key'''> >def> __init__(>self>):> >self>[>'initial'>]>=> 'some data'> d>=> MyDict()> print>(>type>(d)>=>=> dict>)> print>(>type>(d)>=>=> MyDict)> d>=> dict>()> print>(>type>(d)>=>=> dict>)> print>(>type>(d)>=>=> MyDict)>

>

>

Producción:

False True True False>
  • La clase MyDict tiene todas las propiedades de un dict, sin ningún método nuevo. Se comportará exactamente como un diccionario. Pero type() no devolverá el resultado esperado. Es preferible usar isinstance() en este caso porque dará el resultado esperado:

Python3




# python code to show isinstance() support> # inheritance> class> MyDict(>dict>):> >'''A normal dict, that is always created with an 'initial' key'''> >def> __init__(>self>):> >self>[>'initial'>]>=> 'some data'> d>=> MyDict()> print>(>isinstance>(d, MyDict))> print>(>isinstance>(d,>dict>))> d>=> dict>()> print>(>isinstance>(d, MyDict))> print>(>isinstance>(d,>dict>))>

>

>

Producción:

True True False True>