• 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'>]

  • 相关阅读:
    2.5 整数和算法
    斑马问题
    计算机硬件操作
    幸福是什么
    英译汉技巧
    指令
    计算机性能
    硬盘容量的计算方法
    Symmetric Tree
    Same Tree
  • 原文地址:https://www.cnblogs.com/kai-/p/12071053.html
Copyright © 2020-2023  润新知