in

escriba e isinstance en Python

gfg 200x200 min

escribir en Python

Python tiene un método incorporado llamado como tipo que generalmente es útil para determinar el tipo de variable utilizada en el programa en el tiempo de ejecución.

    Si se pasa un solo argumento (objeto) a type () incorporado, devuelve el tipo del objeto dado. Si se pasan tres argumentos (nombre, bases y dict), devuelve un nuevo tipo de objeto.
    Sintaxis:
type(object)
type(name, bases, dict)
  1. type () con un parámetro de objeto único

    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'
    
  2. type () Con un nombre, bases y parámetro dict

     

    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}
    

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

isinstance ()

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

Sintaxis:

isinstance(object, classinfo) 

The isinstance() takes two parameters: object : object to be checked classinfo : class, type, or tuple of classes and types

Valor devuelto:
cierto si el objeto es una instancia o subclase de una clase, o cualquier elemento de la tupla falso de lo contrario. Si la información de clase no es un tipo o una tupla de tipos, se genera una excepción TypeError.

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

tipo () frente a isinstance ()

Un error elemental que cometen las personas es usar la función type () donde isinstance () sería más apropiado.

  • Si está comprobando si un objeto tiene un tipo determinado, quiere isinstance () ya que comprueba si el objeto pasado en el primer argumento es del tipo de cualquiera de los objetos de tipo pasado 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 objeto de tipo de un objeto y comparar lo que devuelve con otro objeto de tipo solo arrojará True cuando use exactamente el mismo objeto de tipo en ambos lados.
    En Python, es preferible utilizar Duck Typing (la verificación de tipos se aplaza al tiempo de ejecución y se implementa mediante escritura dinámica o reflexión) en lugar de inspeccionar el tipo de un objeto.

     

    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"

     

    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 compatibilidad con la herencia.

     

    class MyDict(dict):

        

        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.
    En este caso, es preferible usar isinstance () porque dará el resultado esperado:

    class MyDict(dict):

        

        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

Enlaces de referencia:

1. Desbordamiento de pila: diferencias entre isinstance () y type () en Python
2. Programiz isintance ()
3. Tipo de programación
Este artículo es una contribución de Subhajit Saha. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando contrib.geeksforgeeks.org o envíe su artículo por correo electrónico a contrib@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención geek! Fortalece tus cimientos con el Fundación de programación de Python Curso y aprende los conceptos básicos.

Para empezar, los preparativos de su entrevista Mejore sus conceptos de estructuras de datos con el Python DS Curso. Y para comenzar con su viaje de aprendizaje automático, únase al Aprendizaje automático – Curso de nivel básico

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Función de biblioteca C – exit ()

edit

Ley Federal vs Ley Estatal – Diferencia y Comparación