国产探花免费观看_亚洲丰满少妇自慰呻吟_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 作為此類的元類。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 马鞍山市| 社旗县| 陵水| 砀山县| 共和县| 深泽县| 澄城县| 贵德县| 庆安县| 景德镇市| 沅陵县| 安西县| 文山县| 罗江县| 乐陵市| 常熟市| 嘉义市| 南乐县| 龙游县| 西青区| 定南县| 濮阳县| 宕昌县| 陆良县| 棋牌| 双城市| 大理市| 合作市| 梁平县| 民和| 壶关县| 廊坊市| 成安县| 修文县| 淮滨县| 建湖县| 瑞安市| 瑞安市| 庆阳市| 峨眉山市| 离岛区|