内置函数拾遗:isinstance和issubclass

isinstance

  isinstance(obj1,obj2):判断对象与类之间的关系,判断第一个参数是否是第二个参数的实例。

print(isinstance(1, int))   #判断第一个值是否是第二个值得实例
>>>
True
print(isinstance('1', str))
>>>
True

  回顾一下,之前我们学过的type()函数,is操作符用来比较两个对象的内存地址是否相等。

  那么type()函数和isinstance()函数两者有什么区别呢?

print(type(1) is int)
print(isinstance(1,int))
>>>
True
True

#从上面的结果看,两者的结果都是True,那么type()与isinstance()的区别在哪呢?
#从接下来的例子,就能够清晰看出来。

class A:pass
class B(A):pass
b = B()

print(isinstance(b, B))   #True
print(isinstance(b, A))   #True

print(type(b))         #<class '__main__.B'>
print(type(b) is B)    #True
print(type(b) is A)    #False

#总结:
    isinstance()是可以用在继承的关系上;而type()不能用来检测继承关系。

 

issubclass

  issubclass(obj1,obj2):用来描述一个类与另一个类之前的关系,判断一个类是否是另一个类的子类。

class A:pass
class B(A):pass

print(issubclass(A, B))  #False
print(issubclass(B, A))  #True

#总结:
    第一个参数是子类,第二个参数是父类

  

posted @ 2018-09-05 17:36  hehehe1994  阅读(330)  评论(0编辑  收藏  举报