面向对象相关

Posted on 2018-08-30 20:47  帅气阿明  阅读(78)  评论(0)    收藏  举报
  • isinstance/issubclass/type
    • isinstance :检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
      •   例
      • class Base(object):
            pass
        class Foo(Base):
            pass
        obj1=Foo()
        print(isinstance(obj1,Foo))
        # True    第一个参数(对象)是第二个参数(类及父类)的实例
        print(isinstance(obj1,Base))
        # True    第一个参数(对象)是第二个参数(类及父类)的实例
        obj2=Base()
        print(isinstance(obj2,Base))
        # True    第一个参数(对象)是第二个参数(类及父类)的实例
        print(isinstance(obj2,Foo))
        # False   第一个参数(对象)不是第二个参数(类及父类)的实例
        View Code    
    •    insubclass:检查第一个参数是否为第二个参数的子孙类
      • 例1
        class Base(object):
                 pass
        class Foo(Base):
                 pass
        class Bar(Foo):
                 pass
        print(issubclass(Bar,Foo))​​​​​​​​  #Trueprint(issubclass(Bar,Base))​​​​​​​​  #True
        View Code
      • 例2
        class Foo(object):#
            pass
        class Bar(object):#
            pass
        def func(*args):#函数
            foo_counter =0
            bar_counter =0
            for item in args:
                if type(item) == Foo:
                    foo_counter += 1
                elif type(item) == Bar:
                    bar_counter += 1
            return foo_counter,bar_counter
        result = func(Foo(),Bar(),Foo())
        print(result)
        # (2, 1)
        v1,v2 = func(Foo(),Bar(),Foo())
        print(v1,v2)
        # 2 1​
        View Code
    •    type:获取当前对象是由哪个类创建的
      • class Base(object):
            pass
        obj=Base()
        print(obj,type(obj))    
        ​#<__main__.Base object at 0x0000013939D47940> <class '__main__.Base'>
        if type(obj)==Base:​​
           print("obj是Base类型")​    #obj是Base类型
        View Code