亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python 元類實例解析

 更新時間:2018年04月04日 10:18:42   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了 Python 元類實例解析,此文的主要任務(wù)就是給大家徹底講明白什么是元類,需要的朋友可以參考下

龜叔發(fā)明了 Python,然后集成了一堆概念在這門語言里面,比如:迭代器,裝飾器,函數(shù),生成器,類,對象,協(xié)程等等。

這些概念對初學者似乎沒一個好懂的,不過還有比這更難的概念,它是 Python 世界中的造物主,雖然我們很少去直接使用它,但天天都在用,它就是今天的主角------元類。

今天我的任務(wù)就是徹底明白什么是元類,一起看看。

要搞懂元類,我們還是先從對象說起。

對象(Object)

Python 一切皆對象,這句話你一定有聽說過(現(xiàn)在你就聽說了),一個數(shù)字是對象,一個字符串是對象,一個列表是對象,一個字典是對象,例如:

>>> i = 10
>>> s = "abc"
>>> nums = [1,2,3]
>>> dicts = {"name":"zhang"}

等號右邊是對象,左邊是給這些對象取的名字,任何對象都有3個關(guān)鍵屬性:標識、值、類型。

標識

標識就和人的身份證ID一樣,每個對象有唯一ID標識,在整個生命周期中都不會變,你可以認為標識是這個對象在計算機內(nèi)存中的地址。通過函數(shù) id() 可以查看對象的ID標識。

>>> id(i)
40592592
>>> id(s)
44980584

對象值

對象的第二個屬性是值,值很好理解,比如 i 的值是 10,s 的值是 abc,nums 的值就是 1,2,3。

類型

對象還有一個很重要的屬性就是類型,任何對象都有屬于自己的類型,對象就是由它的類型構(gòu)造出來的,比如上面的 i 的類型是 int 類型,這個對象就是由 int 構(gòu)造出來的。s 類型是字符串類型,nums 的類型是列表類型,dicts 的類型是字典類型,它們都是由對應(yīng)的類型構(gòu)建出來的。

通過 type() 可以查看對象的類型。

>>> type(i)
<class 'int'>
>>> type(s)
<class 'str'>
>>> type(nums)
<class 'list'>
>>> type(dicts)
<class 'dict'>

對象的類型也和ID標識一樣,確定好之后就不會再變化了。

類與(實例)對象

除了系統(tǒng)已經(jīng)定義好了的整數(shù)類型,字符串類型,列表等類型之外,我們還可以創(chuàng)建自己的類型,用關(guān)鍵字 class 來定義。例如:

>>> class Person:
  # 這里的 self 指某個實例對象自己
...  def __init__(self, name):
   # name 是實例的屬性
...   self.name = name
  # live 是類的屬性
  live = True

這里的 Person 就是自定義類,類是一個抽象的模版,既不指張三也不是李四,現(xiàn)在我們可以通過調(diào)用這個類來構(gòu)造(實例化)出一個具體的,實在的,有名字的對象出來,這個對象稱之為實例對象。

>>> p1 = Person("zhangsan")
>>> p1.name
'zhangsan'
>>>
>>> p2 = Person("lisi")
>>> p2.name
'lisi'

這里的 p1、p2 就是實例化之后的(實例)對象,這兩個對象的類型都是 Person 類,類與(實例)對象的關(guān)系就像一個車輛模具與一輛被造出來的真實車的關(guān)系一樣。

>>> p1
<__main__.Person object at 0x0195AA30>
>>> type(p1)
<class '__main__.Person'> # 這里的__main__是模塊名稱

類也是對象(又叫類對象)

剛剛我們說了一切都是對象,實例(真實車)是對象,類(模具)當然也是對象,因為它也是個實實在在存在的東西,

當 Python 解釋器執(zhí)行到關(guān)鍵字 class 這個指令的時候,在內(nèi)部就會創(chuàng)建一個名為 "Person" 的類,這個類也是個對象,我們稱之為類對象(注意區(qū)別實例對象),它一樣有ID標識、有類型、有值。例如:

>>> id(Person)
26564024
>>> type(Person)
<class 'type'>
>>> Person
<class '__main__.Person'>

我們注意到這個 Person 這個類對象的類型叫 “type”,也就是說 Person 類是由 type 創(chuàng)建出來的,現(xiàn)在你要記住,p1,p2 是實例對象,而 Person 是類對象。另外,這個 type 是什么鬼?

我們來回顧一下,實例對象 p1 的類型是類對象 Person,Person 的類型 type

>>> nums = [1,2,3]
>>> type(nums)
<class 'list'>
>>> type(list)
<class 'type'>

nums 的類型是 list,list 的類型也是 type,字典類(dict)的類型也是 type,所有類的類型都是 type,也就是說所有的類都是由type 創(chuàng)建的。這個 type 就是元類,道生一,一生二,三生萬物,元類就是 Python 中的造物主。(元類自己也是對象)

現(xiàn)在我們都知道類(對象)可以使用 class 關(guān)鍵字創(chuàng)建,我們還知道類(對象)的類型是 type,既然知道了它的類型是 type,那么肯定可以通過 type(元類)來創(chuàng)建。

用元類創(chuàng)建類

前面講到過,type 有一個作用是用于檢查對象的類型,其實它還有另外一個作用就是作為元類動態(tài)地創(chuàng)建類(對象)。

>>> Person = type("Person", (), {"live":True})
>>> Person
<class '__main__.Person'>

Person 就是一個類,它等價于:

>>> class Person:
...  live = True
...
>>> Person
<class '__main__.Person'>

用元類 type 創(chuàng)建類的語法是:

type(類名,基類元組(可以為空), 屬性字典)

總結(jié)

以上所述是小編給大家介紹的 Python 元類實例解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • ?Python?匿名函數(shù)lambda?詳情

    ?Python?匿名函數(shù)lambda?詳情

    這篇文章主要介紹了?Python?匿名函數(shù)lambda,??lambda?????函數(shù)返回函數(shù)本身而不是將其賦值給一個變量名。所以它也被稱為匿名函數(shù),下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • scrapy處理python爬蟲調(diào)度詳解

    scrapy處理python爬蟲調(diào)度詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于scrapy處理python爬蟲調(diào)度的相關(guān)內(nèi)容,有興趣的朋友們學習下。
    2020-11-11
  • Python實現(xiàn)輕松防止屏幕截圖的技巧分享

    Python實現(xiàn)輕松防止屏幕截圖的技巧分享

    屏幕截圖是一種常見的用于記錄信息或者監(jiān)控用戶活動的方法,為了保護隱私和數(shù)據(jù)安全,可以通過使用Python編寫一些防護措施來防止他人截取我們的屏幕,下面我們就來學習一下有哪些具體操作吧
    2023-12-12
  • python 判斷網(wǎng)絡(luò)連通的實現(xiàn)方法

    python 判斷網(wǎng)絡(luò)連通的實現(xiàn)方法

    下面小編就為大家分享一篇python 判斷網(wǎng)絡(luò)連通的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 手把手教你pip配置國內(nèi)鏡像源(最新詳盡版)

    手把手教你pip配置國內(nèi)鏡像源(最新詳盡版)

    pip是一個現(xiàn)代的,通用的Python包管理工具,提供了對Python包的查找、下載、安裝、卸載的功能,下面這篇文章主要給大家介紹了關(guān)于pip配置國內(nèi)鏡像源的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • python爬蟲解決驗證碼的思路及示例

    python爬蟲解決驗證碼的思路及示例

    這篇文章主要介紹了python爬蟲解決驗證碼的思路及示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • python類的私有屬性和公共屬性說明

    python類的私有屬性和公共屬性說明

    這篇文章主要介紹了python類的私有屬性和公共屬性說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Pygame Display顯示模塊的使用方法

    Pygame Display顯示模塊的使用方法

    本文主要介紹了Pygame Display顯示模塊的使用方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Jupyter notebook如何實現(xiàn)打開數(shù)據(jù)集

    Jupyter notebook如何實現(xiàn)打開數(shù)據(jù)集

    這篇文章主要介紹了Jupyter notebook如何實現(xiàn)打開數(shù)據(jù)集問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python?pygame新手入門基礎(chǔ)教程

    Python?pygame新手入門基礎(chǔ)教程

    大家都知道pygame是跨平臺Python模塊,專為電子游戲設(shè)計,包含圖像、聲音,這篇文章主要給大家介紹了關(guān)于Python?pygame新手入門基礎(chǔ)教程的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07

最新評論