isinstance、issubbclass

目录

  • isinstance
  • issubclass
  • subclasses

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

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的所有父类: (,)
类B的所有父类: (,)
类C的所有父类: (main_.A'>, )

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


subclasses

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

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

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

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

类A的所有子类: []
类B的所有子类: []

你可能感兴趣的:(isinstance、issubbclass)