isinstance( ) 和 issubclass( ) 方法_wx5fee9e339ad7b的技术博客_51CTO博客

isinstance( ) 和 issubclass( ) 方法

isinstance( ) 和 issubclass( ) 方法

原创

淘小欣 ©著作权

文章标签 Python Python教程 Python开发 文章分类 Python 后端开发

©著作权归作者所有:来自51CTO博客作者淘小欣的原创作品,请联系作者获取转载授权,否则将追究法律责任
isinstance( ) 和 issubclass( ) 方法

一、 isinstance(obj,cls)

1. isinstance()与type()

  • 检查一个对象(obj)是否是类(cls)实例化出来的

    class Foo1:
        def __init__(self):
            self.name="大宝"class Foo2:
        def __init__(self):
            self.name="韦小宝"
    f1=Foo1()
    f2=Foo2()
    print(isinstance(f1,Foo1))  # True
    print(isinstance(f2,Foo1))  # False
    
  • type( ) 判断传入对象的类型

    print(type([1,2.3]) == list)    # True
    print(type(33) is int)          # True
    print(type(3.5) in (int,float)) # True
    

2.不同之处

  • isinstance 它可以判断带有继承关系的类的对象

  • type 只能判断所属类的对象

    class Foo1:
        def __init__(self):
            self.name = "大宝"
    ​
    ​
    class Foo2:
        def __init__(self):
            self.name = "韦小宝"
    ​
    ​
    f1 = Foo1()
    f2 = Foo2()
    print(isinstance(f2, Foo1))  # False
    print(isinstance(f2, Foo2))  # Trueprint(type(f2) is Foo2)  # True
    print(type(f2) is Foo1)  # False
    

3.注意

  • 不能说哪一种方法更好, 只能说哪一个更合适(因为没有最好的,只有最合适的)

二、issubclass(sub,super)

  • 检查sub类是否是super类的派生类(孙子类, 重孙子类…)

    #多继承
    class Foo1:
        def __init__(self):
            self.name = "韦小宝"class Bar1:
        def run(self):
            print("快跑")
    ​
    class Bar2(Bar1,Foo1):
        def run(self):
            print("快跑")
    ​
    class Bar3:
        def speak(self):
            print("快说")
    ​
    print(issubclass(Bar2,Foo1))  # True
    print(issubclass(Bar2,Bar1))  # True
    print(issubclass(Bar3,Bar1))  # False#  多层继承 (父类--->父类)
    class Foo1:
        def __init__(self):
            self.name = "韦小宝"class Bar1(Foo1):
        def run(self):
            print("快跑")
    ​
    class Bar2(Bar1):
        def run(self):
            print("快跑")
    ​
    class Bar3(Bar2):
        def speak(self):
            print("快说")
    ​
    print(issubclass(Bar3,Foo1))  # True
    print(issubclass(Bar3,Bar1))  # True
    print(issubclass(Bar3,Bar2))  # True
    
  • 收藏
  • 评论
  • 举报
提问和评论都可以,用心的回复会被更多人看到 评论
发布评论
相关文章

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核