這篇文章主要介紹了Python 元類實例解析,此文的主要任務就是給大家徹底講明白什麼是元類,需要的朋友可以參考下
龜叔發明了Python,然後整合了一堆概念在這門語言裡面,例如:迭代器,裝飾器,函數,生成器,類,對象,協程等等。
這些概念對初學者似乎沒一個好懂的,不過還有比這更難的概念,它是Python 世界中的造物主,雖然我們很少去直接使用它,但天天都在用,它就是今天的主角------元類。
今天我的任務就是徹底明白什麼是元類,一起看看。
要搞懂元類,我們還是先從物件說起。
物件(Object)
Python 一切皆對象,這句話你一定聽過(現在你就聽說了) ,一個數字是對象,一個字串是對象,一個列表是對象,一個字典是對象,例如:
>>> i = 10 >>> s = "abc" >>> nums = [1,2,3] >>> dicts = {"name":"zhang"}
標識
標識就和人的身分證ID一樣,每個物件都有唯一ID標識,在整個生命週期中都不會變,你可以認為標識是這個物件在電腦記憶體中的位址。透過函數 id() 可以查看物件的ID識別。>>> id(i) 40592592 >>> id(s) 44980584
#物件值
物件的第二個屬性是值,值很好理解,例如i 的值是10,s 的值是abc,nums 的值就是1,2,3。類型
物件還有一個很重要的屬性就是類型,任何物件都有屬於自己的類型,物件就是由它的類型建構出來的,例如上面的i 的類型是int 類型,這個物件就是由int 建構出來的。 s 類型是字串類型,nums 的類型是列表類型,dicts 的類型是字典類型,它們都是由對應的類型建構出來的。 透過 type() 可以查看物件的型別。>>> type(i) <class 'int'> >>> type(s) <class 'str'> >>> type(nums) <class 'list'> >>> type(dicts) <class 'dict'>
類別與(實例)物件
除了系統已經定義好了的整數類型,字串類型,清單等類型之外,我們也可以建立自己的類型,用關鍵字class 來定義。例如:>>> class Person: # 这里的 self 指某个实例对象自己 ... def __init__(self, name): # name 是实例的属性 ... self.name = name # live 是类的属性 live = True
>>> p1 = Person("zhangsan") >>> p1.name 'zhangsan' >>> >>> p2 = Person("lisi") >>> p2.name 'lisi'
>>> p1 <__main__.Person object at 0x0195AA30> >>> type(p1) <class '__main__.Person'> # 这里的__main__是模块名称
#類別也是物件(又叫類別物件)
剛剛我們說了一切都是對象,實例(真實車)是對象,類別(模具)當然也是對象,因為它也是個實實在存在的東西,當Python 解釋器執行到關鍵字class 這個指令的時候,在內部就會創建一個名為"Person" 的類,這個類也是個對象,我們稱為類對象(注意區別實例對象),它一樣有ID標識、有型別、有值。例如:>>> id(Person) 26564024 >>> type(Person) <class 'type'> >>> Person <class '__main__.Person'>
>>> nums = [1,2,3] >>> type(nums) <class 'list'> >>> type(list) <class 'type'>
用元類別建立類別#
前面讲到过,type 有一个作用是用于检查对象的类型,其实它还有另外一个作用就是作为元类动态地创建类(对象)。
>>> Person = type("Person", (), {"live":True}) >>> Person <class '__main__.Person'>
Person 就是一个类,它等价于:
>>> class Person: ... live = True ... >>> Person <class '__main__.Person'>
用元类 type 创建类的语法是:
type(类名,基类元组(可以为空), 属性字典)
总结
以上所述是小编给大家介绍的 Python 元类实例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
相关推荐:
以上是Python 元類別實例解析_python的詳細內容。更多資訊請關注PHP中文網其他相關文章!