Python 中類別也是物件
在了解元類之前,我們先進一步理解 Python 中的類,在大多數程式語言中,類別就是一組用來描述如何產生一個物件的程式碼片段。在 Python 中這一點也是一樣的。
class ObjectCreator(object): pass mObject = ObjectCreator() print(mObject)
輸出結果:
<__main__.ObjectCreator object at 0x00000000023EE048>
但是,Python 中的類別有一點跟大多數的程式語言不同,在 Python 中,可以把類別理解成也是一種物件。對的,這裡沒有寫錯,就是對象。
為什麼呢?
因為只要使用關鍵字 class ,Python 解釋器在執行的時候就會建立一個物件。
如:
class ObjectCreator(object): pass
當程式運行這段程式碼的時候,就會在記憶體中建立一個對象,名字就是ObjectCreator。這個物件(類別)本身擁有創建物件(類別實例)的能力,而這就是為什麼它是一個類別的原因。但是,它的本質仍然是一個對象,於是我們可以對它做如下的操作:
class ObjectCreator(object): pass def echo(ob): print(ob) mObject = ObjectCreator() print(mObject) # 可以直接打印一个类,因为它其实也是一个对象 print(ObjectCreator) # 可以直接把一个类作为参数传给函数(注意这里是类,是没有实例化的) echo(ObjectCreator) # 也可以直接把类赋值给一个变量 objectCreator = ObjectCreator print(objectCreator)
輸出的結果如下:
<__main__.ObjectCreator object at 0x000000000240E358> <class '__main__.ObjectCreator'> <class '__main__.ObjectCreator'> <class '__main__.ObjectCreator'>