我們知道,type()函數(shù)屬于Python內(nèi)置函數(shù),通常用來查看某個(gè)變量的具體類型。其實(shí),type()函數(shù)還有一個(gè)更高級(jí)的用法,即創(chuàng)建一個(gè)自定義類型(也就是創(chuàng)建一個(gè)類)。
type()函數(shù)的語(yǔ)法格式有2種,分別如下:
type(obj) type(name, bases, dict)12復(fù)制代碼類型:[python]
以上這2種語(yǔ)法格式,各參數(shù)的含義及功能分別是:
第一種語(yǔ)法格式用來查看某個(gè)變量(類對(duì)象)的具體類型,obj表示某個(gè)變量或者類對(duì)象。
第二種語(yǔ)法格式用來創(chuàng)建類,其中name表示類的名稱;bases表示一個(gè)元組,其中存儲(chǔ)的是該類的父類;dict表示一個(gè)字典,用于表示類內(nèi)定義的屬性或者方法。
對(duì)于使用type()函數(shù)查看某個(gè)變量或類對(duì)象的類型,由于很簡(jiǎn)單,這里不再做過多解釋,直接給出一個(gè)樣例:
#查看 3.4 的類型print(type(3.4))#查看類對(duì)象的類型class CLanguage: passclangs = CLanguage() print(type(clangs))1234567復(fù)制代碼類型:[python]
輸出結(jié)果為:
<class 'float'> <class '__main__.CLanguage'>12復(fù)制代碼類型:[python]
這里重點(diǎn)介紹type()函數(shù)的另一種用法,即創(chuàng)建一個(gè)新類,先來分析一個(gè)樣例:
#定義一個(gè)實(shí)例方法def say(self): print("我要學(xué) Python!")#使用 type() 函數(shù)創(chuàng)建類CLanguage = type("CLanguage",(object,),dict(say = say, name = "開課吧廣場(chǎng)"))#創(chuàng)建一個(gè) CLanguage 實(shí)例對(duì)象clangs = CLanguage()#調(diào)用 say() 方法和 name 屬性clangs.say() print(clangs.name)12345678910復(fù)制代碼類型:[python]
注意,Python元組語(yǔ)法規(guī)定,當(dāng)(object,)元組中只有一個(gè)元素時(shí),最后的逗號(hào)(,)不能省略。
可以看到,此程序中通過type()創(chuàng)建了類,其類名為CLanguage,繼承自objects類,且該類中還包含一個(gè)say()方法和一個(gè)name屬性。
有讀者可能會(huì)問,如何判斷dict字典中添加的是方法還是屬性?很簡(jiǎn)單,如果該鍵值對(duì)中,值為普通變量(如"C語(yǔ)言中文網(wǎng)"),則表示為類添加了一個(gè)類屬性;反之,如果值為外部定義的函數(shù)(如say()),則表示為類添加了一個(gè)實(shí)例方法。
運(yùn)行上面的程序,其輸出結(jié)果為:
我要學(xué) Python! 開課吧廣場(chǎng)12復(fù)制代碼類型:[python]
可以看到,使用type()函數(shù)創(chuàng)建的類,和直接使用class定義的類并無差別。事實(shí)上,我們?cè)谑褂胏lass定義類時(shí),Python解釋器底層依然是用type()來創(chuàng)建這個(gè)類。
聯(lián)系客服