国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python探索之Metaclass初步了解

2020-02-16 10:30:45
字體:
來源:轉載
供稿:網友

先以一個大牛的一段關于Python Metapgramming的著名的話來做開頭:

Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder whether you need them, you don't (the people who actually need them know with certainty that they need them, and don't need an explanation about why). – Tim Peters

翻譯一下:Metaclasses是99%的用戶都無需費神的黑科技。如果你還在糾結你是不是需要它的話,答案是NO (真正需要的人根本不需要解釋) – Tim Peters

這是什么鬼話?道可道,非常道嗎?

Meta?

好,裝B已畢。這確實是一個冷僻的,不常用的話題。一篇短文肯定講不完。 所以叫做初步了解。

python中的類

首先這里討論的python類,都基于繼承于object的新式類進行討論。

首先在python中,所有東西都是對象。這句話非常重要要理解元類我要重新來理解一下python中的類

class Trick(object):  pass

當python在執行帶class語句的時候,會初始化一個類對象放在內存里面。例如這里會初始化一個Trick對象

這個對象(類)自身擁有創建對象(通常我們說的實例,但是在python中還是對象)的能力。

為了方便后續理解,我們可以先嘗試一下在新式類中最古老厲害的關鍵字type。

input:class Trick(object):passprint type('123')print type(123)print type(Trick())output:<type 'str'><type 'int'><class '__main__.Trick'>

可以看到能得到我們平時使用的 str, int, 以及我們初始化的一個實例對象Trick()

但是下面的方法你可能沒有見過,type同樣可以用來動態創建一個類

type(類名, 父類的元組(針對繼承的情況,可以為空),包含屬性的字典(名稱和值))

英文meta這個詞其實是從希臘語里面借來的。wikipedia上的解釋是:

indicate a concept which is an abstraction behind another concept, used to complete or add to the latter

不看還好,其實看了更暈。好在后面的解釋有一句“更高一層的抽象”,可以幫助理解。 其實我們可以這樣理解。meta的意思就是“關于什么的什么”:比如metadata可以理解為“關于數據的數據”,metaprogramming可以理解為“關于編程的編程”。這就和“更高一層的抽象” 比較契合了。同時又隱隱和編程中的另一個永恒主題-recursion聯系在了一起。

另外,meta這個詞天朝這邊翻譯成“元”,海峽對岸翻譯成“后設”。其實我都不大理解從何而來。

元類一般用于創建類。在執行類定義時,解釋器必須要知道這個類的正確的元類。解釋器會先尋找類屬性__metaclass__,如果此屬性存在,就將這個屬性賦值給此類作為它的元類。如果此屬性沒有定義,它會向上查找父類中的__metaclass__.如果還沒有發現__metaclass__屬性,解釋器會檢查名字為__metaclass__的全局變量,如果它存在,就使用它作為元類。否則, 這個類就是一個傳統類,并用 types.ClassType 作為此類的元類。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泌阳县| 循化| 石狮市| 丰顺县| 青岛市| 台东市| 墨脱县| 讷河市| 延津县| 卓资县| 淮北市| 潜江市| 顺义区| 寿宁县| 长岛县| 离岛区| 灵武市| 白河县| 鄱阳县| 离岛区| 方山县| 南宫市| 简阳市| 离岛区| 赞皇县| 平遥县| 子洲县| 辉南县| 兰考县| 泗水县| 万安县| 广州市| 丰镇市| 任丘市| 桃江县| 安西县| 巴马| 平舆县| 涞水县| 赣榆县| 蓝山县|