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