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屬性就顯示出來了 #不要對實例屬性和類屬性使用相同的名字,由於相同名稱的實例屬性將屏蔽掉類屬性,可是當你刪除實例屬性後,再使用相同的名稱,訪問到的將是類屬性