zoukankan      html  css  js  c++  java
  • isinstance、issubbclass

    Python提供了如下两个函数来检查类型:

    isinstance(obj, class_or_tuple):检查 obj 是否为后一个类或元组包含的多个类中任意类的对象。

    issubclass(cls, class_or_tuple):检查 cls 是否为后一个类或元组包含的多个类中任意类的子类。

    isinstance

    判断一个对象是否是另一个类的实例。

    (传两个参数,一个是对象,一个是类)

    如果是: True
    如果不是: False
    
    isinstance:
    class Foo:
        pass
    
    class Boo:
        pass
    
    foo_obj = Foo()
    boo_obj = Boo()
    
    print(isinstance(foo_obj, Foo))  # True
    print(isinstance(boo_obj, Foo))  # False
    

    isinstance() 与 type() 区别

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

    如果要判断两个

    类型是否相同推荐使用 isinstance()。



    issubclass

    判断一个类是否是另一个类的子类。

    (传两个参数,一个是子类,一个是父类)

    如果是: True
    如果不是: False
    
    # issubclass
    class Father:
        pass
    
    class Sub(Father):
        pass
    
    class Foo:
        pass
    
    print(issubclass(Sub, Father))  # True
    print(issubclass(Foo, Father))  # False
    

    Python 为所有类都提供了一个 __bases__属性,通过该属性可以查看该类的所有直接父类(基类),该属性返回所有直接父类组成的元组。例如如下代码:

    class A:
        pass
    class B:
        pass
    class C(A, B):
        pass
    print('类A的所有父类:', A.__bases__)
    print('类B的所有父类:', B.__bases__)
    print('类C的所有父类:', C.__bases__)
    

    结果:

    类A的所有父类: (<class 'object'>,)
    类B的所有父类: (<class 'object'>,)
    类C的所有父类: (<class '_main_.A'>, <class '_main_.B'>)

    从上面的运行结果可以看出,如果在定义类时没有显式指定它的父类,则这些类默认的父类是 object 类。


    subclasses

    Python 还为所有类都提供了一个 _subclasses_() 方法,通过该方法可以查看该类的所有直接子类,该方法返回该类的所有子类组成的列表。例如在上面程序中增加如下两行:

    print('类A的所有子类:', A._subclasses_())

    print('类B的所有子类:', B._subclasses_())

    运行上面代码,可以看到如下输出结果:

    类A的所有子类: [<class '_main_.C'>]
    类B的所有子类: [<class '_main_.C'>]

  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/kai-/p/12071053.html
Copyright © 2011-2022 走看看