最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Python的元類

 更新時間:2021年11月25日 14:31:39   作者:程序員-夏天  
這篇文章主要為大家介紹了Python的元類,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

什么是元類

Python中,一切皆對象,我們定義的數(shù)字、字符串、函數(shù)、列表等都是對象,對象是類(class)的是實例,而類(class)其實也是對象,是type的實例。這個type就是Python中的元類metaclass)。所謂元類就是用于創(chuàng)建所有類型的類,Python中的所有新式類以及Python3中的所有類都是type元類的實例。我們看下面這個例子:

print(type(0))  # <class 'int'>
print(type(int))  # <class 'type'>
print(type("tigeriaf"))  # <class 'str'>
print(type(str))  # <class 'type'>
print(type([1, 2, 3]))  # <class 'list'>
print(type(list))  #  <class 'type'>
class User:
    pass
u = User()
print(type(u))  # <class '__main__.User'>
print(type(User))  # <class 'type'>
print(type(type))  # <class 'type'>

type元類動態(tài)創(chuàng)建類

之前我們定義類要使用class關(guān)鍵字進行創(chuàng)建,除了這樣我們還可以使用type動態(tài)的去創(chuàng)建類。

用法如下:

type(name, bases, dict),接收三個參數(shù)

  • 第一個參數(shù)name是指要創(chuàng)建類的名稱
  • 第二個參數(shù)bases是指需要繼承父類的元組
  • 第三個參數(shù)dict是類的屬性

例如:

class User:
    def __init__(self):
        self.name = 'tigeriaf'
print(User)
user = User()
print(user.name)
class User:
    def __init__(self):
        self.name = 'tigeriaf'
print(User)
user = User()
print(user.name)

以上兩種方式都可以創(chuàng)建類,輸出結(jié)果也是一樣的,可見使用type動態(tài)的去創(chuàng)建類也是非常方便的。

自定義元類

通過上面的例子我們知道可以使用type(name, bases, dict)來創(chuàng)建類,如果當使用type元類無法滿足我們的一些需求時,我們可以自定義一個元類并使用該元類去創(chuàng)建類嗎?答案是可以的,下面我們來看一下:

class MyMetaClass(type):
    def __init__(cls, name, bases, dict):
        super().__init__(name, bases, dict)
        cls.int_attrs = {}
        for k, v in dict.items():
            if type(v) is int:
                cls.int_attrs[k] = v
User = MyMetaClass('User', (), {'name': 'tigeriaf', "age": 24, "level": 2, "introduction": "Python全菜工程師"})
print(User)  # <class '__main__.User'>
user = User()  
print(user.name)  # tigeriaf
print(user.int_attrs)  # {'age': 24, 'level': 2}

也可以使用下面這種方法,去創(chuàng)建繼承元類的類。

class User(metaclass=MyMetaClass):
    pass

注意:在Python2中使用元類需要在要創(chuàng)建的類內(nèi)對__metaclass__進行賦值,值為元類。

上述代碼定義一個類MyMetaClass,繼承自type類,因為type是元類,所以MyMetaClass也是一個元類,在__init__通過super().__init__(name, bases, dict)調(diào)用了父類type的__init__()方法,在實現(xiàn)自定義元類的基礎(chǔ)上,還在創(chuàng)建類的時候把屬性循環(huán)了一遍,然后值為int類型的屬性單獨存了起來。這樣我們就實現(xiàn)了比type元類更定制化的元類了,我們可以隨意在元類內(nèi)添加我們想要的功能。

總結(jié)

總體下來,發(fā)現(xiàn)元類及其使用有些難以理解且看不出有什么特別的地方能讓我們?nèi)ナ褂?,好吧,確實如此,通常情況下確實可能用不到它,其實元類主要就是在類和實例創(chuàng)建的時候發(fā)揮作用,來實現(xiàn)一些功能,如果確實不清楚什么時候該去使用的話,那我們就不需要它,當真正需要它的時候,我們可能就會發(fā)現(xiàn)它的強大之處。

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Python中裝飾器高級用法詳解

    Python中裝飾器高級用法詳解

    這篇文章主要介紹了Python中的裝飾器的高級用法,以實例形式詳細的分析了Python中的裝飾器的使用技巧及相關(guān)注意事項
    2017-12-12
  • Python獲取Excel文件行數(shù)的方法

    Python獲取Excel文件行數(shù)的方法

    在數(shù)據(jù)分析和自動化辦公領(lǐng)域,Python 因其簡潔的語法和強大的庫支持而廣受歡迎,特別是當涉及到處理 Excel 文件時,Python 提供了多種庫來簡化這一過程,本文給大家介紹了如何使用Python獲取 Excel 文件的行數(shù),感興趣的小伙伴跟著小編一起來看看吧
    2024-09-09
  • 基于python requests selenium爬取excel vba過程解析

    基于python requests selenium爬取excel vba過程解析

    這篇文章主要介紹了基于python requests selenium爬取excel vba過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Python?Pygame實戰(zhàn)之打磚塊小游戲

    Python?Pygame實戰(zhàn)之打磚塊小游戲

    打磚塊最早是由雅達利公司開發(fā)的一款獨立游戲,也是無數(shù)人的童年記憶。本文將利用Python中的Pygame模塊制作經(jīng)典的打磚塊游戲,需要的可以參考一下
    2022-02-02
  • python3實現(xiàn)網(wǎng)絡(luò)爬蟲之BeautifulSoup使用詳解

    python3實現(xiàn)網(wǎng)絡(luò)爬蟲之BeautifulSoup使用詳解

    這篇文章主要介紹了python3實現(xiàn)網(wǎng)絡(luò)爬蟲之BeautifulSoup使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Python3模擬登錄操作實例分析

    Python3模擬登錄操作實例分析

    這篇文章主要介紹了Python3模擬登錄操作,結(jié)合實例形式分析了Python3模擬登陸驗證、判斷、文件讀寫等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • 一小時學(xué)會TensorFlow2之自定義層

    一小時學(xué)會TensorFlow2之自定義層

    這篇文章主要介紹了TensorFlow2之自定義層,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Pycharm使用遠程linux服務(wù)器conda/python環(huán)境在本地運行的方法(圖解))

    Pycharm使用遠程linux服務(wù)器conda/python環(huán)境在本地運行的方法(圖解))

    這篇文章主要介紹了Pycharm使用遠程linux服務(wù)器conda/python環(huán)境在本地運行的方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Python實現(xiàn)多線程抓取妹子圖

    Python實現(xiàn)多線程抓取妹子圖

    本文給大家匯總了3款由Python制作的多線程批量抓取美圖的代碼,主要是將獲取圖片鏈接任務(wù)和下載圖片任務(wù)用線程分開來處理了,而且這次的爬蟲不僅僅可以爬第一頁的圖片鏈接的,有類似需求的小伙伴可以參考下。
    2015-08-08
  • Python?reversed函數(shù)用法小結(jié)

    Python?reversed函數(shù)用法小結(jié)

    reversed函數(shù)是Python中的內(nèi)置函數(shù)之一,是對給定的序列返回一個逆序序列的迭代器,需要通過遍歷/list/next()等方法獲取作用后的值,本文給大家介紹Python?reversed函數(shù)及用法,感興趣的朋友一起看看吧
    2023-10-10

最新評論

乌拉特后旗| 洛宁县| 云和县| 谢通门县| 连州市| 泸水县| 禄丰县| 银川市| 黄平县| 嵊州市| 鄂托克前旗| 韩城市| 麻城市| 瓦房店市| 崇义县| 乳源| 阿勒泰市| 社会| 吉木萨尔县| 丹巴县| 连州市| 彭水| 远安县| 临清市| 布尔津县| 师宗县| 镇江市| 宁明县| 凤翔县| 开原市| 绥宁县| 甘泉县| 阿拉善左旗| 沅陵县| 措勤县| 磐石市| 太仓市| 南康市| 嘉禾县| 张家界市| 仁怀市|