内置函数拾遗: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
#总结:
第一个参数是子类,第二个参数是父类