• python3 isinstance


    先来看一下英文的解释:

    The isinstance() function checks if the object (first argument) is an instance or subclass of classinfo class (second argument).

     

    The syntax of isinstance() is:

    isinstance(object, classinfo)

    isinstance() Parameters

    The isinstance() takes two parameters:

    • object - object to be checked
    • classinfo - class, type, or tuple of classes and types

    Return Value from isinstance()

    The isinstance() returns:

    • True if the object is an instance or subclass of a class, or any element of the tuple
    • False otherwise

     

     
     

    If classinfo is not a type or tuple of types, a TypeError exception is raised.


    Example 1: How isinstance() works?

    class Foo:
      a = 5
      
    fooInstance = Foo()
    
    print(isinstance(fooInstance, Foo))
    print(isinstance(fooInstance, (list, tuple)))
    print(isinstance(fooInstance, (list, tuple, Foo)))

    When you run the program, the output will be:

    True
    False
    True

    Example 2: Working of isinstance() with Native Types

    numbers = [1, 2, 3]
    
    result = isinstance(numbers, list)
    print(numbers,'instance of list?', result)
    
    result = isinstance(numbers, dict)
    print(numbers,'instance of dict?', result)
    
    result = isinstance(numbers, (dict, list))
    print(numbers,'instance of dict or list?', result)
    
    number = 5
    
    result = isinstance(number, list)
    print(number,'instance of list?', result)
    
    result = isinstance(number, int)
    print(number,'instance of int?', result)

    When you run the program, the output will be:

    [1, 2, 3] instance of list? True
    [1, 2, 3] instance of dict? False
    [1, 2, 3] instance of dict or list? True
    5 instance of list? False
    5 instance of int? True

    再看下面的代码:

    class hhh:
        def init1(self):
            pass
    
    class sss:
        def init1(self):
            print("ssss")
    
    s = sss()
    print(isinstance(s, hhh))
    

     值是false,根据英文的解释,是对的。(python3基础教程第三版129页,描述是错的。)

        上面这种鸭子类型是不能通过检查的。

    Python 中有很多的协议,比如迭代器协议,任何实现了 __iter__ 和 __next__ 方法的对象都可称之为迭代器,但对象本身是什么类型不受限制,这得益于鸭子类型。

    from collections import Iterable
    from collections import Iterator
    
    
    class MyIterator:
        def __iter__(self):
    
            pass
    
    
        def __next__(self):
            pass
    
    
    print(isinstance(MyIterator(), Iterable))
    print(isinstance(MyIterator(), Iterator))
    
    True
    True
    

      

    抽象类

    from abc import ABC, abstractmethod
    class hhh(ABC):
        @abstractmethod
        def init1(self):
            pass
    
    class sss:
        def init1(self):
            print("ssss")
    
    s = sss()
    print(isinstance(s, hhh))
    
    
    hhh.register(sss)
    print(isinstance(s, hhh))
    

      第二个print的值时true,抽象类加注册。只是技巧,不推荐,如果sss没有实现init1方法,也是true。 

    issubclass: 判断一个类是否是另一个类的子类。
        - 如果是: True
        - 如果不是: False

    Python中为什么推荐使用isinstance来进行类型判断?而不是type:请看https://www.cnblogs.com/clschao/articles/7093344.html

    isinstance() 与 type() 区别:

    • type() 不会认为子类是一种父类类型,不考虑继承关系。

    • isinstance() 会认为子类是一种父类类型,考虑继承关系。

     

    对于基本类型来说 classinfo 可以是:

    intfloatboolcomplexstr(字符串),listdict(字典),settuple

    The isinstance() function checks if the object (first argument) is an instance or subclass of classinfo class (second argument).

    The syntax of isinstance() is:

    isinstance(object, classinfo)
    

      

    isinstance() Parameters

     The isinstance() takes two parameters:

    • object - object to be checked
    • classinfo - class, type, or tuple of classes and types

    Return Value from isinstance()

    The isinstance() returns:

    • True if the object is an instance or subclass of a class, or any element of the tuple
    • False otherwise

    If classinfo is not a type or tuple of types, a TypeError exception is raised.


    Example 1: How isinstance() works?

    1.  
      class Foo:
    2.  
      a = 5
    3.  
       
    4.  
      fooInstance = Foo()
    5.  
       
    6.  
      print(isinstance(fooInstance, Foo))
    7.  
      print(isinstance(fooInstance, (list, tuple)))
    8.  
      print(isinstance(fooInstance, (list, tuple, Foo)))


      When you run the program, the output will be:
    True
    False
    True

      

    Example 2: Working of isinstance() with Native Types

     

    1.  
      numbers = [1, 2, 3]
    2.  
       
    3.  
      result = isinstance(numbers, list)
    4.  
      print(numbers,'instance of list?', result)
    5.  
       
    6.  
      result = isinstance(numbers, dict)
    7.  
      print(numbers,'instance of dict?', result)
    8.  
       
    9.  
      result = isinstance(numbers, (dict, list))
    10.  
      print(numbers,'instance of dict or list?', result)
    11.  
       
    12.  
      number = 5
    13.  
       
    14.  
      result = isinstance(number, list)
    15.  
      print(number,'instance of list?', result)
    16.  
       
    17.  
      result = isinstance(number, int)
    18.  
      print(number,'instance of int?', result)


      When you run the program, the output will be:
    [1, 2, 3] instance of list? True
    [1, 2, 3] instance of dict? False
    [1, 2, 3] instance of dict or list? True
    5 instance of list? False
    5 instance of int? True
  • 相关阅读:
    python_selenium 之logging模块入门及调用实战
    python_selenium 之yaml文件读取(以读取元素信息为例)
    python_selenium_PO模式下显示等待、隐式等待封装,结合Excel读取元素可取默认等待时间配置
    ubuntu WPS的安装
    ubuntu时间网络同步
    shell笔记
    for循环
    循环语句
    流程控制语句
    JavaScript数组
  • 原文地址:https://www.cnblogs.com/yunlong-study/p/13262164.html
Copyright © 2020-2023  润新知