import types print(type(‘abc‘) == str)#True print(type(123) == int)#True def f1(): pass print(type(f1) == types.FunctionType)#True print(type(abs) == types.BuiltinFunctionType)#True print(type(lambda x:x) == types.LambdaType)#True print(type(x for x in range(0,11)) == types.GeneratorType)#True #isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上,总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽” print(isinstance(b‘b‘,bytes))#True print(isinstance([1,2,3],(list,tuple)))#True 一个变量是否是某些类型中的一种 #获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list print(dir(‘abc‘))#[‘__add__‘, ‘__class__‘,..., ‘__subclasshook__‘, ‘capitalize‘, ‘casefold‘,..., ‘zfill‘] #配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态 class F1(object): def __init__(self,num): self.__num__ = num def get_num(self): return self.__num__ f1 = F1(300) print(hasattr(f1,‘__num__‘))#True setattr(f1,‘x‘,200)#设置一个属性‘x‘ print(getattr(f1,‘x‘))#200 print(getattr(f1,‘get_num‘))#<bound method F1.get_num of <__main__.F1 object at 0x000001C2A4B00358>> 可以获得对象的方法 #print(F1.x)#x只是添加到了实例f1的属性里,没有添加在F1的属性里 #定义了一个类属性后,这个属性虽然归类所有,但类的所有实例都可以访问到 class Student(object): name = ‘Student‘ s = Student() # 创建实例s print(s.name) #Student 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性 print(Student.name) # Student打印类的name属性 s.name = ‘Michael‘ # 给实例绑定name属性 print(s.name) #Michael 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性 print(Student.name) #Student 但是类属性并未消失,用Student.name仍然可以访问 del s.name # 如果删除实例的name属性 print(s.name) #Student 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了 #不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性
原文:https://www.cnblogs.com/xingxingclassroom/p/10892030.html