Python中type()详解:动态创建类
眾所周知:type()函數(shù)可以查看變量的類型:
先看一個(gè)簡(jiǎn)單的列子來(lái)看一下type查看變量類型
class Animal():passa=Animal() print(type(a)) print(type(Animal))<class '__main__.Animal'> <class 'type'>可以發(fā)現(xiàn)我定義的Animal類本身的類型是 type
從 Python 解釋器的角度來(lái)看,當(dāng)程序使用 class 定義 Animal 類時(shí),也可理解為定義了一個(gè)特殊的對(duì)象(type 類的對(duì)象),并將該對(duì)象賦值給 Animal 變量。因此,程序使用 class 定義的所有類都是 type 類的實(shí)例。
實(shí)際上 Python 完全允許使用 type() 函數(shù)(相當(dāng)于 type 類的構(gòu)造器函數(shù))來(lái)創(chuàng)建 type 對(duì)象,又由于 type 類的實(shí)例就是類,因此 Python 可以使用 type() 函數(shù)來(lái)動(dòng)態(tài)創(chuàng)建類
正常情況下類的創(chuàng)建及實(shí)例化調(diào)用
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' class Test():name = "Test"def hello(self):print("hello world")t = Test() t.hello()#Test.hello(t) print(t.name)而使用type()動(dòng)態(tài)創(chuàng)建類:
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' def hello(self):self.name = 10print("hello world")t = type("hello",(),{"a":1,"hello":hello}) print(t) T = t() print(T.a) T.hello() print(T.name)<class '__main__.hello'> 1 hello world 10所以type是可以實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類的,其實(shí)python中一切都是對(duì)象,類也是對(duì)象;只不過(guò)是一種特殊的對(duì)象,是type的對(duì)象
python中類創(chuàng)建的本質(zhì):
我們使用class創(chuàng)建類,當(dāng)你使用class關(guān)鍵字時(shí),Python解釋器自動(dòng)創(chuàng)建這個(gè)對(duì)象。而底層其實(shí)使用的是type函數(shù)(type函數(shù)也可以查看實(shí)例所屬類型)來(lái)創(chuàng)建類的。所以我們可以直接使用type()函數(shù)來(lái)手動(dòng)實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類。
當(dāng)type()只有一個(gè)參數(shù)時(shí),其作用就是返回變量或?qū)ο蟮念愋?br /> 當(dāng)type()有三個(gè)參數(shù)時(shí),其作用就是創(chuàng)建類對(duì)象:
- 第一個(gè)參數(shù):name表示類名稱,字符串類型
- 第二個(gè)參數(shù):bases表示繼承對(duì)象(父類),元組類型,單元素使用逗號(hào)
- 第三個(gè)參數(shù):attr表示屬性,這里可以填寫(xiě)類屬性、類方式、靜態(tài)方法,采用字典格式,key為屬性名,value為屬性值
總結(jié):
通過(guò)type添加的屬性是類屬性,并不是實(shí)例屬性
通過(guò)type可以給類添加普通方法,靜態(tài)方法,類方法,效果跟class一樣
type創(chuàng)建類的效果,包括繼承等的使用性質(zhì)和class創(chuàng)建的類一樣。本質(zhì)class創(chuàng)建類的本質(zhì)就是用type創(chuàng)建。所以可以說(shuō)python中所有類都是type創(chuàng)建的。
對(duì)元類的理解與注意事項(xiàng)
元類就是類的類,python中函數(shù)type實(shí)際上是一個(gè)元類。type就是Python在背后用來(lái)創(chuàng)建所有類的元類。Python中所有的東西——都是對(duì)象。這包括整數(shù)、字符串、函數(shù)以及類。它們?nèi)慷际菍?duì)象,而且它們都是從一個(gè)類創(chuàng)建而來(lái),這個(gè)類就是type。type就是Python的內(nèi)建元類,當(dāng)然了,也可以創(chuàng)建自己的元類。
python查看對(duì)象所屬類型既可以用type函數(shù),也可以用對(duì)象自帶的__class__屬性。
以下代碼驗(yàn)證:任何對(duì)象最終的所屬類都是type。 type是所有類的創(chuàng)造者。
num = 1 print(num.__class__) print(num.__class__.__class__)<class 'int'> <class 'type'>總結(jié)
以上是生活随笔為你收集整理的Python中type()详解:动态创建类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python __slots__限制动态
- 下一篇: python3接收、解析邮件