pythoninstance類型
1. Python2和Python3中isinstance與type的區別
Python2與Python3中isinstance與type方法各有特點,用於判斷對象類型。
isinstance與type皆可用於判斷類型,isinstance的使用方式為isinstance(object,classinfo);type的使用方式為type(object)。
例如isinstance(1,int)的輸出為True。
而type(1)則返回結果為:int。
在Python2中,type方法不能用於檢查對象是否屬於某個類。
例如,a的type返回值是instance,而非A。
相比之下,Python3中type方法結果與預期一致。
值得注意的是,isinstance方法支持類繼承關系的判斷,而type方法不支持繼承,僅能判斷對象是否為當前類實例。
2. Python中的舊樣式類和新樣式類有什麼區別
在Python 2.1之前,舊式類是用戶可用的唯一樣式。
(舊式)類的概念與類型的概念無關:如果x是舊式類的實例,則x.__class__指定的類x,但type(x)始終為<type
'instance'>。這反映了這樣一個事實,即所有舊式實例(獨立於其類)均使用稱為實例的單個內置類型實現。在Python 2.2中引入了新的類,以統一class和type的概念。新型類只是用戶定義的類型,不多也不少。如果x是新樣式類的實例,則type(x)通常與x 相同x.__class__(盡管不能保證–允許新樣式類實例覆蓋為返回的值x.__class__)。
引入新型類的主要動機是提供具有完整元模型的統一對象模型。
它還具有許多直接的好處,例如能夠對大多數內置類型進行子類化,或者引入了「描述符」,以啟用計算屬性。出於兼容性原因,默認情況下,類仍為舊樣式。通過將另一個新樣式類(即一種類型)指定為父類或「頂級類型」對象(如果不需要其他父類)來創建新樣式類。
新樣式類的行為與舊樣式類的行為不同,除了返回什麼類型外,還有許多重要的細節。其中一些更改是新對象模型的基礎,例如調用特殊方法的方式。其他是出於兼容性考慮而無法實現的「修復程序」,例如在多重繼承的情況下的方法解析順序。
Python 3僅具有新型類。無論是否從中繼承子類object,類都是Python 3中的新型樣式。