获取对象的信息
使用type获取对象的类型,如下:
1 class Animal(object): 2 def run(self): 3 print('Animal is running') 4 class Dog(Animal): 5 pass 6 print(type(Animal())) 7 print(type('123')) 8 print(type(123)) 9 print(type(None))
输出如下:
<class '__main__.Animal'> <class 'str'> <class 'int'> <class 'NoneType'>
但是用type获取对象的类型再做比较十分不便,所以一般用isinstance()函数
class Animal(object): def run(self): print('Animal is running') class Dog(Animal): pass print(type(Animal())) print(type('123')) print(type(123)) print(type(None)) print(isinstance(Animal(),Animal)) print(isinstance('123',str)) print(isinstance(123,int))
输出为:
<class '__main__.Animal'> <class 'str'> <class 'int'> <class 'NoneType'> True True True
还可以判断某个对象是否为列出的类型中的一种,如下:
print(isinstance((1,2,3),(list,tuple))) 输出: True
使用dir()函数可以获取对象的所有属性与方法,还可以使用hasattr(对象,属性)来判断某个对象是否有某个属性,如hasattr(Animal(),'run'),还可以获取该对象的属性或者方法,如getattr(对象,属性或方法),还可以新增对象的属性,如setattr(对象,属性,设定值)
实例属性与类属性的区别
之前定义类的时候在__init__函数中定义的是实例属性,如果需要定义类的属性,该属性不随实例的产生而产生,只要定义了类就都存在,类似于静态函数的概念,那么就直接在类定义时予以确定,不需要放在__init__函数中。
实例属性的优先级高于类属性,不要让实例属性与类属性名字相同,否则实例属性的值会覆盖类属性的值。