日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3基础教程:元类详解

發布時間:2025/3/20 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3基础教程:元类详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.引入

Python中一切皆對象,所謂對象就是由類創建出來,那么創建對象的類本身也是一個對象,也就是說創建對象的類本身也由別的什么類創建,這種創建類的類就叫元類.

2.元類是誰?

type函數就是元類,沒錯就是那個打印數據類型的函數,也就是說是type創建了類.

我們寫一個類然后打印一下他的屬性看看

In [4]: class MyClass(object): ...: pass ...: In [5]: type(MyClass) Out[5]: type

可以看到MyClass類的類型是type,用Python語言來描述這種關系就是:

MyClass = type()

3.type和object的區別

剛接觸元類時很容易搞混這兩者.區別如下

type是說有類的創建者

object是所有類的父類

怎么理解呢?記住以下幾點就OK了(可能有點繞)

  • type和object不是同一層的東西
  • type是元類object是普通類
  • 元類的對象是普通類,普通類的對象就是普通對象
  • 繼承自object的類包括object本身都是普通類
  • 繼承自type的類都是元類
  • 普通類都是元類的對象
In [9]: type(object) Out[9]: type

那么是誰創建了type呢?這個問題留給你們自己去找答案,我相信有很多小伙伴已經猜到了.

4.通過type創建普通類

由type創建普通類的格式為

變量名 = type("類名", ("繼承的類",), {"屬性名":"屬性值"})

第二個參數是元組類型

舉個例子

In [11]: Myclass = type("ClassName", (object,), {"name": "kainhuck", "foo":"bar"}) In [12]: Myclass Out[12]: __main__.ClassName

可以看到Myclass不是真正的類名,真正的類名是ClassName.

創建一個名為ClassA,繼承自object類,并帶有屬性name和方法printName的類,寫法如下

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [15]: def printName(self): ...: print(self.name) ...: In [16]: ClassA = type("ClassA",(object,),{"name":"myName", "printName":printName}) In [17]: a = ClassA() In [18]: a.printName() myName

5.創建自己的元類

前面已經有過提示,我們可以通過繼承type來創建自己的元類

舉個例子:

In [20]: class MetaClass(type): ...: pass ...: In [21]: ClassA = MetaClass("ClassA",(object,),{"name":"myName", "printName":printName}) In [22]: a = ClassA() In [23]: a.printName() myName

這個例子中我只繼承type沒有增加任何新的功能

我們知道創建一個對象的功能由__new__函數實現,下面我們通過修改__new__函數來創建一個必須含有printName方法的類.

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [30]: class MyMetaClass(type): ...: def __new__(cls, name, bases, attrs): ...: func = attrs.get("printName", None) ...: if not callable(func): ...: raise NotImplementedError("必須創建一個名為 printName 的函數") ...: return type.__new__(cls, name, bases, attrs) ...: ...: In [31]: ClassA = MyMetaClass("ClassA",(object,),{"name":"myName", "printName":"not callable"}) --------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) <ipython-input-31-772aa102a27f> in <module> ----> 1 ClassA = MyMetaClass("ClassA",(object,),{"name":"myName", "printName":"not callable"})<ipython-input-30-c2ffcc442a77> in __new__(cls, name, bases, attrs)3 func = attrs.get("printName", None)4 if not callable(func): ----> 5 raise NotImplementedError("必須創建一個名為 printName 的函數")6 return type.__new__(cls, name, bases, attrs)7 NotImplementedError: 必須創建一個名為 printName 的函數In [32]: ClassA = MyMetaClass("ClassA",(object,),{"name":"myName", "printName":printName}) In [33]:

可以看到如果我們定義的類沒有創建printName函數就會報錯.

6.類工廠

所謂類工廠就是生產類的地方,我們可以設計一個函數,使該函數可以通過參數來返回不同的類.

男人和女人都是人,但是不同性別的人剪頭發的時間不一樣.我們就可以定義一個類工廠來按需求產生不同的類.

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def Person(sex):def manCut(self):print("我是男人,我剪頭發很快")def womanCut(self):print("我是女人,我剪頭發很慢")if sex == "man":return type("man", (object,), {"hairCut": manCut})elif sex == "woman":return type("woman", (object,), {"hairCut": womanCut})else:print("Error")Man = Person("man") Woman = Person("woman")lilei = Man() hanmeimei = Woman()

輸出:

我是男人,我剪頭發很快 我是女人,我剪頭發很慢

總結

以上是生活随笔為你收集整理的Python3基础教程:元类详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费av一级| 春色导航| 亚洲国产精品尤物yw在线观看 | 污视频在线观看网站 | 打开免费观看视频在线 | 国产精品久久福利 | h视频免费在线观看 | 色偷偷欧美| 精品一区二区在线观看 | 国产人人爽 | 麻豆国产尤物av尤物在线观看 | 99久久婷婷国产综合精品青牛牛 | 中文字幕久久av | 日韩人妻精品无码一区二区三区 | 欧美激情在线观看一区 | 一本久久久久 | 欧美少妇精品 | 奇米四色777 | 日产精品久久久久久久蜜臀 | 国产激情一区二区三区视频免樱桃 | av女优天堂在线观看 | 双性人hdsexvideos | 国产专区欧美专区 | 色网站入口 | 国产女主播一区二区三区 | 日韩三级麻豆 | 中文天堂在线视频 | 亚洲影院在线播放 | 7799精品视频 | 免费成年人视频在线观看 | 超碰www| 欧美一级二级三级视频 | 日韩有码在线观看 | 天堂在线网 | 精品成人18 | 暖暖av| 日本成人免费观看 | 中文字幕一区二区三区乱码不卡 | 在线精品观看 | 又黄又爽又色的视频 | 丁香婷婷社区 | 亚洲最新在线视频 | 理论片av| 国产一二 | 日日日网站| 人人爱人人 | 青青青网| 97超碰人人爱 | 激情欧美一区二区三区 | 黄瓜视频成人 | 色播激情 | 国产一二| 国产真实老熟女无套内射 | 免费视频91蜜桃 | 欧美精选一区 | 国精产品99永久一区一区 | 婷婷的五月 | 婷婷综合久久 | 国产视频一区二区三 | 韩国精品在线 | 欧美一区二区三区小说 | 红桃视频一区二区三区免费 | 可以免费看的黄色 | 天天干天天操心 | 青青青草视频在线 | 亚洲综合成人网 | 美日韩av在线 | 亚洲国产精品人人爽夜夜爽 | 亚洲美女性生活 | 国产视频在线免费观看 | 青青视频免费 | 日韩精品视频在线观看网站 | 91精品久久久久久久99蜜桃 | 亚洲国产成人精品久久久 | 欢乐谷在线观看免费播放高清 | 亚洲视频高清 | 爱逼综合网 | 一极毛片 | 色播欧美 | 国产一级高清 | av网站在线免费 | 国产乡下妇女做爰毛片 | 92av视频| 中文高清av | 日本美女裸体视频 | 日韩精品伦理 | 免费观看视频一区二区 | 国产手机精品视频 | 久久亚州| 二区三区免费 | 白白色视频在线 | 天天射天天 | 国产黑丝视频 | 欧美成人国产精品高潮 | 香蕉视频亚洲 | 色综合天天综合网天天狠天天 | 五月婷婷综合久久 | 色噜噜狠狠一区二区三区 | chinese中国性按摩hd |