码迷,mamicode.com
首页 > 其他好文 > 详细

isinstance、issubbclass

时间:2019-12-20 00:57:42      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:定义   没有   查看   一个   方法   参数   The   list   pytho   

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的所有父类: (<class ‘object‘>,)
类B的所有父类: (<class ‘object‘>,)
类C的所有父类: (<class ‘_main_.A‘>, <class ‘__main__.B‘>)

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


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

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

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

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

类A的所有子类: [<class ‘__main__.C‘>]
类B的所有子类: [<class ‘__main__.C‘>]

isinstance、issubbclass

标签:定义   没有   查看   一个   方法   参数   The   list   pytho   

原文地址:https://www.cnblogs.com/wow-santa/p/12071053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!