Python內(nèi)置對(duì)象如何才能更好的學(xué)習(xí)
Python內(nèi)置對(duì)象和C結(jié)構(gòu)體的對(duì)應(yīng),在某種程度上來(lái)說(shuō)是一個(gè)對(duì)我們相當(dāng)有用的。下面我們就看看如何才能更好的使用這個(gè)優(yōu)點(diǎn),希望大家有所收獲。首先需要談的是那些Python內(nèi)置對(duì)象,這些都是C語(yǔ)言定義了的,當(dāng)Python環(huán)境初始化后,這些對(duì)象便創(chuàng)建好了。
現(xiàn)在Python內(nèi)置對(duì)象面向?qū)ο髾C(jī)制的對(duì)象和類型的抽象都已經(jīng)說(shuō)過(guò)了,接下來(lái)我們來(lái)看下在python中真實(shí)存在的對(duì)象在C語(yǔ)言實(shí)現(xiàn)的時(shí)候是怎么樣的呢?
以下是引用片段:
- PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in '
type' */ PyAPI_DATA(PyTypeObject) PyBaseObject_Type;
/* built-in 'object' */
object對(duì)象在Python中是一個(gè)比較基礎(chǔ)的對(duì)象,它在C語(yǔ)言中對(duì)應(yīng)的結(jié)構(gòu)體是PyBaseObject_Type,從C語(yǔ)言中的這個(gè)命名我們可以大概知道這個(gè)類是一個(gè)類型對(duì)象。還有就是Python內(nèi)置對(duì)象中的<type 'type'>在C語(yǔ)言中對(duì)應(yīng)著PyType_Type
以下是引用片段:
- PyTypeObject PyType_Type = { PyObject_HEAD_INIT(&PyType
_Type) 0, /* ob_size */ "type", /* tp_name */ sizeof
(PyHeapTypeObject), /* tp_basicsize */ sizeof(PyMembe
rDef), /* tp_itemsize */ …… };
我們?cè)倏纯幢容^具體的整數(shù)。
一個(gè)整數(shù)instance在C語(yǔ)言中的表示的結(jié)構(gòu)體是PyIntObject,以下是引用片段:
- typedef struct {
- PyObject_HEAD
- long ob_ival;
- } PyIntObject;
也就是說(shuō)通過(guò)這樣的結(jié)構(gòu)體我們就可以在C語(yǔ)言的的運(yùn)行時(shí)中指向Python的整數(shù)對(duì)象.。那么相應(yīng)的我們Python的整數(shù)類型對(duì)象為,以下是引用片段:
- yTypeObject PyInt_Type = {
- PyObject_HEAD_INIT(&PyType_Type)
- 0,
- "int",
- sizeof(PyIntObject),
- …… };
Python內(nèi)置對(duì)象自定義對(duì)象
當(dāng)我們創(chuàng)建一個(gè)Python對(duì)象的時(shí)候,最終都是通過(guò)Python的底層來(lái)做的,當(dāng)我們通過(guò)Python語(yǔ)言定義了自己的一個(gè)class A之后,Python首先根據(jù)你寫(xiě)的代碼創(chuàng)建了一個(gè)A這樣的class對(duì)象(類對(duì)象),然后當(dāng)你需要?jiǎng)?chuàng)建A的實(shí)例的時(shí)候,其實(shí)在Python內(nèi)置對(duì)象的底層都是通過(guò)A這個(gè)Class對(duì)象進(jìn)行創(chuàng)建的。
【編輯推薦】