Python type 與 __bases__
阿新 • • 發佈:2017-05-20
src ont tls ces true 模板 href dict enc
type 字面意思是類型,可以理解為模具,通過模具生成各種各樣的實例。 Python中內置函數type()可以查看實例的具體類型。
什麽樣子的類型是type呢 ? 看看下面的例子。
>>> type(bool)
<type ‘type‘>
>>> type(str) <type ‘type‘> >>> type(int) <type ‘type‘> >>> type(list) <type ‘type‘> >>> type(dict) <type ‘type‘> >>> type(set) <type ‘type‘> >>> type(type) <type ‘type‘>
可以發現, bool,str,int,list,dict,set都是type類型,而且這些是基本類型。
看一下這些類型的實例:
>>> type(True) <type ‘bool‘> >>> type(False) <type ‘bool‘> >>> type(‘1234‘) <type ‘str‘> >>> type([1,2,3,4])<type ‘list‘> >>> type({1,2,3,4}) <type ‘set‘> >>> type({1:‘a‘,2:‘b‘,3:‘c‘,4:‘d‘}) <type ‘dict‘>
還有一種類型叫做class, 它也是一種模板,它的實例叫做Object。
>>> class MyObjectA(object): ... pass ... >>> type(MyObjectA) <type ‘type‘>
class 具有繼承關系, 那它的子類又是什麽類型呢 ? Python中所有的class都繼承object, 那object又是什麽類型呢?
>>> class MyObjectSubA(MyObjectA): ... pass ... >>> type(MyObjectSubA) <type ‘type‘> >>> type(object) <type ‘type‘>
看來只要是class,類型都是type。 再看看它們的實例化的對象類型
>>> my_object_a = MyObjectA() >>> type(my_object_a) <class ‘MyObjectA‘> >>> my_object_sub_a = MyObjectSubA() >>> type(my_object_sub_a) <class ‘MyObjectSubA‘>
如果一個object是誰的實例,那它的類型就是誰。
再來看一看__bases__, __bases__ 也是內置函數, 用來查看class的繼承關系。先看看下面多種繼承的關系。
>>> class MyObjectB(object): ... pass ... >>> class MyObjectC(MyObjectA, MyObjectB): ... pass ... >>> MyObjectC.__bases__ (<class ‘MyObjectA‘>, <class ‘MyObjectB‘>)
MyObjectC繼承MyObjectA, MyObjectB. 可以看到MyObjectC的__bases__ 就是包含MyObjectA和MyObjectB的一個元組。
可以試下Python tutor
MyObjectA的__bases__是object, 驗證下:
MyObjectA.__bases__ (<type ‘object‘>,)
那object的__base__是什麽呢?
>>> object.__bases__ ()
空的元組。
type的__bases__是什麽呢 ?
>>> type.__bases__ (<type ‘object‘>,)
object
最後,我們可以整理出一幅這樣的圖
Python type 與 __bases__