python原類、類的創(chuàng)建過程與方法詳解
今天為大家介紹一下python中與class 相關的知識……
獲取對象的類名
python是一門面向對象的語言,對于一切接對象的python來說,咱們有必要深入的學習與了解一些知識
首先大家都知道,要獲取一個對象所對應的類,需要使用class來進行檢索。
但如果我們只是一個簡單的賦值語句,能這么使用么?讓我們看下下面的代碼:
num=10 string='abc' class MainClass: pass p=MainClass() print(num.__class__) # output: <class 'int'> print(string.__class__) # output: <class 'str'> print(p.__class__) # output: <class '__main__.MainClass'>
通過上面的代碼我們看到了,不論我們是簡單的賦值操作,還是我們自己去定義一個類,并且通過這個類生成了一個對象。我們都可以使用__class__來查詢對象所對應的方法。此處應該大多數(shù)人都是了解的。繼續(xù)往下走
將我們眼中的類作為對象
剛才我們通過__class的方式獲取了str、int、還有我們自定義的MainClass這三個類名。
但如果我們繼續(xù)把他們作為對象,那么所對應的類是誰呢?讓我們打印下
print(int.__class__) # 或者這么寫:print(num.__class__.__class__) # output: <class 'type'> print(str.__class__) # output: <class 'type'> print(MainClass.__class__) # output: <class 'type'>
class 'type' 這是一個什么鬼?
它叫原類,是創(chuàng)造其他類的類…
有人要問了,type就是祖宗了么?還有沒有祖宗的祖宗?你可以自己驗證啊,按照上面的方法
print(type.__class__) output: <class 'type'>
這下死心了啊,type這個祖宗上面沒有祖宗了。哈哈….
為什么是type
type這個函數(shù)我們經常會用到,比如一個對象,我們想知道它是什么類型的,那么我們會使用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 """ ... ... ... ...
看到注釋的時候我們明白了,type有兩個用法
獲取類型
創(chuàng)建新type
相信第一點,我們都經常用,否了解。
第二點是干嘛的?讓我們留一個懸念,接著往下看
類的99.99%創(chuàng)建方法
所有人不管是java的還是Python的都明白,創(chuàng)建一個類么,class+類名 OK了
那么你知道你在class+類名,然后賦值或者定義實例方法的時候到底內存做了什么
class MainClass: name='Uranus'
這個方法應該是比pass高檔一分錢不到的腦殘類了??赡阒涝趦却嬷兴隽耸裁疵矗?/p>
- 首先他創(chuàng)建了一個變量,變量的名字叫MainClass
- 之后python開辟了一塊內存空間,用于創(chuàng)建一個類,類名為ClassMain
- 將ClassMain這個變量指向ClassMain
- 在這個方法中創(chuàng)建一個dict的字典
- dict這個字典指向一個內存空間,存放著{name:Uranus}
和你們想的一樣么?先不說一樣不一樣,估計很多人都要說我是瞎說的…沒關系
介紹0.01%的類創(chuàng)建方法
剛才留了一個疑問,type的第二種用法,用來創(chuàng)建一個新的type
它是做什么的呢?讓我先來演示一段代碼
def func(): return 'is a function...' # 重點在這里 TypeClass=type('MainClass1',(),{'name':'Uranus','func':func}) print(TypeClass.__class__) # output: <class 'type'> print(TypeClass) # output: <class '__main__.MainClass1'> print(TypeClass.__dict__) # output: {'__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'MainClass1' objects>, '__dict__': <attribute '__dict__' of 'MainClass1' objects>, '__doc__': None, 'func': <function func at 0x00000000024DDEA0>, 'name': 'Uranus'} print(TypeClass.name) # output: Uranus print(TypeClass.func()) # output: is a function...
好了,現(xiàn)在告訴我,TypeClass是什么,是不是一個類?
我在type中做了什么,是不是創(chuàng)建類名,忽略父類,創(chuàng)建類屬性,創(chuàng)建類的實例方法?
傳統(tǒng)的class創(chuàng)建,知識將TypeClass這個變量名設置的和你的類名MainClass1一樣而已
type的第二種方法你會了么?類的創(chuàng)建過程你明白了么?之前你會么?
感謝大家的閱讀和對腳本之家的支持。
相關文章
Python使用CuPy模塊實現(xiàn)高效數(shù)值計算
CuPy是一個基于Python的GPU加速計算庫,它提供了與NumPy相似的接口,可以在GPU上進行高效的數(shù)值計算,本文主要介紹一下CuPy的應用場景,并給出一些Python代碼案例,需要的可以參考下2024-02-02用python 批量更改圖像尺寸到統(tǒng)一大小的方法
下面小編就為大家分享一篇用python 批量更改圖像尺寸到統(tǒng)一大小的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03Python進行ffmpeg推流和拉流rtsp、rtmp實例詳解
Python推流本質是調用FFmpeg的推流進程,下面這篇文章主要給大家介紹了關于Python進行ffmpeg推流和拉流rtsp、rtmp的相關資料,需要的朋友可以參考下2023-01-01