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