今天為大家介紹一下python中與class?相關(guān)的知識(shí)……
獲取對(duì)象的類(lèi)名
python是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,對(duì)于一切接對(duì)象的python來(lái)說(shuō),咱們有必要深入的學(xué)習(xí)與了解一些知識(shí)
首先大家都知道,要獲取一個(gè)對(duì)象所對(duì)應(yīng)的類(lèi),需要使用class來(lái)進(jìn)行檢索。
但如果我們只是一個(gè)簡(jiǎn)單的賦值語(yǔ)句,能這么使用么?讓我們看下下面的代碼:
num=10 string='abc' class MainClass: pass p=MainClass() print(num.__class__) # output:print(string.__class__) # output: print(p.__class__) # output:
通過(guò)上面的代碼我們看到了,不論我們是簡(jiǎn)單的賦值操作,還是我們自己去定義一個(gè)類(lèi),并且通過(guò)這個(gè)類(lèi)生成了一個(gè)對(duì)象。我們都可以使用__class__來(lái)查詢(xún)對(duì)象所對(duì)應(yīng)的方法。此處應(yīng)該大多數(shù)人都是了解的。繼續(xù)往下走
將我們眼中的類(lèi)作為對(duì)象
剛才我們通過(guò)__class的方式獲取了str、int、還有我們自定義的MainClass這三個(gè)類(lèi)名。
但如果我們繼續(xù)把他們作為對(duì)象,那么所對(duì)應(yīng)的類(lèi)是誰(shuí)呢?讓我們打印下
print(int.__class__) # 或者這么寫(xiě):print(num.__class__.__class__) # output:print(str.__class__) # output: print(MainClass.__class__) # output:
class 'type' 這是一個(gè)什么鬼?
它叫原類(lèi),是創(chuàng)造其他類(lèi)的類(lèi)…
有人要問(wèn)了,type就是祖宗了么?還有沒(méi)有祖宗的祖宗?你可以自己驗(yàn)證啊,按照上面的方法
print(type.__class__) output:
這下死心了啊,type這個(gè)祖宗上面沒(méi)有祖宗了。哈哈….
為什么是type
type這個(gè)函數(shù)我們經(jīng)常會(huì)用到,比如一個(gè)對(duì)象,我們想知道它是什么類(lèi)型的,那么我們會(huì)使用type(xxx)
那么type它到底是什么?看源碼嘍…
class type(object): """ type(object_or_name, bases, dict) type(object) -> the object's type type(name, bases, dict) -> a new type """ ... ... ... ...
看到注釋的時(shí)候我們明白了,type有兩個(gè)用法
獲取類(lèi)型
創(chuàng)建新type
相信第一點(diǎn),我們都經(jīng)常用,否了解。
第二點(diǎn)是干嘛的?讓我們留一個(gè)懸念,接著往下看
類(lèi)的99.99%創(chuàng)建方法
所有人不管是java的還是Python的都明白,創(chuàng)建一個(gè)類(lèi)么,class+類(lèi)名 OK了
那么你知道你在class+類(lèi)名,然后賦值或者定義實(shí)例方法的時(shí)候到底內(nèi)存做了什么
class MainClass: name='Uranus'
這個(gè)方法應(yīng)該是比pass高檔一分錢(qián)不到的腦殘類(lèi)了。可你知道在內(nèi)存中它做了什么么?
- 首先他創(chuàng)建了一個(gè)變量,變量的名字叫MainClass
- 之后python開(kāi)辟了一塊內(nèi)存空間,用于創(chuàng)建一個(gè)類(lèi),類(lèi)名為ClassMain
- 將ClassMain這個(gè)變量指向ClassMain
- 在這個(gè)方法中創(chuàng)建一個(gè)dict的字典
- dict這個(gè)字典指向一個(gè)內(nèi)存空間,存放著{name:Uranus}
和你們想的一樣么?先不說(shuō)一樣不一樣,估計(jì)很多人都要說(shuō)我是瞎說(shuō)的…沒(méi)關(guān)系
介紹0.01%的類(lèi)創(chuàng)建方法
剛才留了一個(gè)疑問(wèn),type的第二種用法,用來(lái)創(chuàng)建一個(gè)新的type
它是做什么的呢?讓我先來(lái)演示一段代碼
def func(): return 'is a function...' # 重點(diǎn)在這里 TypeClass=type('MainClass1',(),{'name':'Uranus','func':func}) print(TypeClass.__class__) # output:print(TypeClass) # output: print(TypeClass.__dict__) # output: {'__module__': '__main__', '__weakref__': , '__dict__': , '__doc__': None, 'func': , 'name': 'Uranus'} print(TypeClass.name) # output: Uranus print(TypeClass.func()) # output: is a function...
好了,現(xiàn)在告訴我,TypeClass是什么,是不是一個(gè)類(lèi)?
我在type中做了什么,是不是創(chuàng)建類(lèi)名,忽略父類(lèi),創(chuàng)建類(lèi)屬性,創(chuàng)建類(lèi)的實(shí)例方法?
傳統(tǒng)的class創(chuàng)建,知識(shí)將TypeClass這個(gè)變量名設(shè)置的和你的類(lèi)名MainClass1一樣而已
type的第二種方法你會(huì)了么?類(lèi)的創(chuàng)建過(guò)程你明白了么?之前你會(huì)么?
感謝大家的閱讀和對(duì)腳本之家的支持。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
