做(zuò)自(zì)由與創造的先行(xíng)者

Types: 12. Other Built-in Types

Python開(kāi)發手冊

12. Other Built-in Types

解釋器支持其他(tā)幾種對象。其中大多數(shù)隻支持一(yī)兩個操作(zuò)。

12.1。模塊

模塊上(shàng)唯一(yī)的特殊操作(zuò)是屬性訪問(wèn):m.name,其中m是模塊,名稱訪問(wèn)m的符号表中定義的名稱。模塊屬性可(kě)以分配給。(請(qǐng)注意,該import語句嚴格來說不是對模塊對象的操作(zuò); import foo不需要(yào)名為(wèi)foo的模塊對象存在,而是需要(yào)某個名為(wèi)foo的模塊的(外(wài)部)定義。)

每個模塊的特殊屬性是__dict__。這(zhè)是包含模塊符号表的字典。修改這(zhè)個字典實際上(shàng)會改變模塊的符号表,但(dàn)直接賦值給__dict__屬性是不可(kě)能(néng)的(你可(kě)以寫m.__dict__['a'] = 1,定義m.a為(wèi)1,但(dàn)不能(néng)寫m.__dict__ = {})。__dict__不建議(yì)直接修改。

內(nèi)置在解釋器中的模塊是這(zhè)樣寫的:。如(rú)果從(cóng)一(yī)個文件加載,它們被寫為(wèi)

12.2。類和(hé)類實例

請(qǐng)參閱對象,值和(hé)類型以及這(zhè)些類的定義。

12.3。功能(néng)

函數(shù)對象由函數(shù)定義創建。函數(shù)對象的唯一(yī)操作(zuò)是調用它:func(argument-list)。

實際上(shàng)有兩種功能(néng)對象:內(nèi)置函數(shù)和(hé)用戶定義函數(shù)。兩者都(dōu)支持相同的操作(zuò)(來調用函數(shù)),但(dàn)實現是不同的,因此不同的對象類型。

有關更多信息,請(qǐng)參閱函數(shù)定義

12.4。方法

方法是使用屬性表示法調用的函數(shù)。有兩種風(fēng)格:內(nèi)置方法(如(rú)append()列表)和(hé)類實例方法。內(nèi)置方法用支持它們的類型來描述。

該實現為(wèi)類實例方法添加了(le)兩個特殊的隻讀屬性:m.im_self方法運行(xíng)的對象,以及m.im_func實現該方法的函數(shù)。callingm(arg-1, arg-2, ..., arg-n)與calling完全等同m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)。

類實例方法是綁定或非綁定的,分别指的是該方法是通(tōng)過實例還是類來訪問(wèn)。當一(yī)個方法被解除綁定時(shí),它的im_self屬性将被None調用,并且如(rú)果被調用,則self必須将一(yī)個顯式對象作(zuò)為(wèi)第一(yī)個參數(shù)傳遞。在這(zhè)種情況下(xià),self必須是未綁定方法的類(或該類的子類)的實例,否則TypeError會引發a。

和(hé)函數(shù)對象一(yī)樣,方法對象也支持獲取任意屬性。但(dàn)是,由于方法屬性實際上(shàng)存儲在底層函數(shù)對象(meth.im_func)中,因此禁止在綁定或未綁定方法上(shàng)設置方法屬性。嘗試在方法上(shàng)設置屬性會導緻AttributeError引發。為(wèi)了(le)設置一(yī)個方法屬性,你需要(yào)在底層函數(shù)對象上(shàng)明(míng)确地(dì)設置它:

>>> class C:

... def method(self):

... pass

...

>>> c = C()

>>> c.method.whoami = 'my name is method' # can't set on the method

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'instancemethod' object has no attribute 'whoami'

>>> c.method.im_func.whoami = 'my name is method'

>>> c.method.whoami

'my name is method'

複制

有關更多信息,請(qǐng)參閱标準類型層次結構

12.5。代碼對象

代碼對象被實現用來表示“僞編譯”的可(kě)執行(xíng)Python代碼,如(rú)函數(shù)體。它們不同于函數(shù)對象,因為(wèi)它們不包含對其全局執行(xíng)環境的引用。代碼對象由內(nèi)置compile()函數(shù)返回,并可(kě)以通(tōng)過函數(shù)對象的func_code屬性提取。另請(qǐng)參閱code模塊。

通(tōng)過将代碼對象(而不是源字符串)傳遞給exec語句或內(nèi)置eval()函數(shù),可(kě)以執行(xíng)或評估代碼對象。

有關更多信息,請(qǐng)參閱标準類型層次結構

12.6。鍵入對象

類型對象表示各種對象類型。對象的類型由內(nèi)置函數(shù)訪問(wèn)type()。類型沒有特别的操作(zuò)。标準模塊types定義了(le)所有标準內(nèi)置類型的名稱。

類型是這(zhè)樣寫的:

12.7。空對象

該對象由不顯式返回值的函數(shù)返回。它不支持特殊操作(zuò)。隻有一(yī)個空對象,名為(wèi)None(內(nèi)置名稱)。

它被寫為(wèi)None。

12.8。省略對象

該對象由擴展切片符号使用(請(qǐng)參見(jiàn)切片)。它不支持特殊操作(zuò)。有一(yī)個省略号對象,名為(wèi)Ellipsis(內(nèi)置名稱)。

它被寫為(wèi)Ellipsis。當在一(yī)個下(xià)标,也可(kě)以寫為(wèi)...,例如(rú)seq[...]。

12.9。未實現的對象

當它們被要(yào)求對不支持的類型進行(xíng)操作(zuò)時(shí),該對象從(cóng)比較和(hé)二進制操作(zuò)中返回。有關更多信息,請(qǐng)參閱比較。

它被寫為(wèi)NotImplemented。

12.10。布爾值

布爾值是兩個常量對象False和(hé)True。它們被用來表示真值(盡管其他(tā)值也可(kě)以被認為(wèi)是錯誤或真實的)。在數(shù)值上(shàng)下(xià)文中(例如(rú),當用作(zuò)算術(shù)運算符的參數(shù)時(shí)),它們的行(xíng)為(wèi)分别與整數(shù)0和(hé)1相同。bool()如(rú)果該值可(kě)以被解釋為(wèi)真值(參見(jiàn)上(shàng)面的真值測試部分),那(nà)麽可(kě)以使用內(nèi)置函數(shù)将任何值轉換為(wèi)布爾值。

它們分别寫成False和(hé)True。

12.11。內(nèi)部對象

糾錯

請(qǐng)參閱此信息的标準類型層次結構。它描述了(le)堆棧框架對象,追溯對象和(hé)切片對象。

網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發
下(xià)一(yī)篇:Types: 13. Special Attributes
上(shàng)一(yī)篇:Types: 11. Context Manager Types