使用type()
基本类型的判断:
a=type(123)
print(a)
print(type(None))
指向函数或者类的变量:
print(type(abs))
比较两个变量的type类型是都相同:
print(type(123)==type(456))
print(type(123)==int)
使用isinstance()
对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。
print(isinstance(dog,Animal))
****
能用type()判断的基本类型也可以用isinstance()判断:
如:print(isinstance('a',str))
****
还可以判断一个变量是否是某些类型中的一种,比如:
print(isinstance([1,2,3],(list,tuple)))
print(isinstance((1,2,3),(list,tuple)))
使用dir()
如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:
print(dir('ABC'))
****
类似__XXX__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面代码等价
print(len('ABC'))
print('ABC'.__len__())
配合getattr(),setattr()以及hasattr(),可以直接操作一个对象的状态:
class Student():
def __init__(self):
self.x=9
def power(self):
return self.x*self.x
a=Student()
print(hasattr(a,'x'))
print(hasattr(a,'y'))
setattr(a,'y',10)#设置一个属性‘Y’
print(a,'y')
print(getattr(a,'y'))#获取属性Y
print(a.y)
*****
如果视图获取不存在的属性,会抛出异常
print(getattr(a,'z'))
可以传入一个default参数,如果属性不存在,就返回默认值:
print(getattr(a,'z',404))