在Python里全部都是目標(object),引用類型,如數(shù)據(jù),字符串數(shù)組,函數(shù)公式全是目標。目標需要由類(class)開展建立。那樣即然全部都是目標,那樣類是目標嗎?沒錯,類都是目標,那樣也是誰創(chuàng)造了類呢?回答很簡單,都是類,一個可以寫作類類,稱作(type)元類
類的定義
目標是由類建立的,如下邊的編碼:
#object為高層成員變量 classWork(object): a=100 Mywork=Work()#創(chuàng)建對象 print(Mywork)#Mywork是Work所建立的一個對象<__main__.Workobjectat0x101eb4630> print(type(Mywork))# print(type(Work))#為非元類
分析:
能夠看見目標Mywork是類Work建立的案例。然可是能夠看見Work的種類的時候由一個叫type的類建立的案例。即Mywork—》Work—》type創(chuàng)建
上邊的事例中目標是實例化的,類乃是根據(jù)搜索關(guān)鍵詞class申明界定的
那樣class搜索關(guān)鍵詞其背后的洞天到底是什么呢?
事實上,classWork(object)這種編碼,等額的于Work=type(‘Work’,(objects,),{“a”:100})
即類type通過創(chuàng)建對象創(chuàng)立了它目標Work,而且這個Work往往是一個類,這樣可以創(chuàng)建類的類,便是Python的元類。而在python中自帶的元類叫:type
一、什么叫元類
用于創(chuàng)建類的類,稱為元類
類是元類建立出去對象
函數(shù)公式type事實上是個元類,type便是Python在身后用于建立全部類元類
二、留意區(qū)別元類及傳承的成員變量
type是元類,每一個類也是通過type所建立出的
object高層的成員變量,全部類的繼承高層成員變量全是object
三、type元類應(yīng)用
能夠看見type是小寫字母,正常情況下都會覺得是一款函數(shù)公式,根據(jù)網(wǎng)頁源代碼去看看如下所示界定的:
classtype(object): """ type(object_or_name,bases,dict) type(object)->theobject'stype type(name,bases,dict)->anewtype """ #創(chuàng)建對象 def__init__(cls,what,bases=None,dict=None):#knownspecialcaseoftype.__init__ """ type(object_or_name,bases,dict) type(object)->theobject'stype type(name,bases,dict)->anewtype #(copiedfromclassdoc) """ pass #創(chuàng)建類 staticmethod#knowncaseof__new__ def__new__(*args,**kwargs):#realsignatureunknown """ Createandreturnanewobject.Seehelp(type)foraccuratesignature. (建立并返回一個新目標) """ pass type的用法一:獲取數(shù)據(jù)時那種種類:type(object)->theobject’stype a=100 b="100" c=[11,22,33] print(type(a))#======》 print(type(b))#======》 print(type(c))#======》
type的用法二:創(chuàng)建類:type(object_or_name,bases,dict)
1.在查看源碼的時候,能夠看見在初始化時,init__方法接受三個參數(shù),type在創(chuàng)建對象的過程,也會重新建立一個新的類,而創(chuàng)建類的編碼來自__new方法,它參數(shù)與__init__方法是一樣的。
2.當調(diào)用type開展創(chuàng)建對象的時候,會先自動調(diào)用new方法,再調(diào)用__init__方法,最終會創(chuàng)建對象一個對象,這個目標是一個類。
1.元類type的init方法有3個參數(shù):
1.name:類名(字符串類型)
2.bases:傳承的成員變量(元祖種類)
3.dict:屬性和方法組成的字典(字典種類)
具體例子:
#根據(jù)class定義類 classMyclass(object): a=100 b=200 #根據(jù)type創(chuàng)建的類(實例化類) Myclass1=type("Myclass1",(object,),{"a":"100","b":"200"}) print(Myclass) print(Myclass1) 如果需要定義實例方法和類屬性怎么辦呢?,將方法和屬性以字典的形式傳進去 defwork(self): print("這是實例方法——————work————————") #定義類屬性值 definit_method(self,aa,bb,cc): self.aa=aa self.bb=bb self.cc=cc #根據(jù)type創(chuàng)建的類(實例化類) Myclass2=type("Myclass2",(object,),{"a":"100","b":"200","work":work,"work_1":work_1,"__init__":init_method}) m=Myclass2(11,22,33) m.work() print(m.aa,m.bb,m.cc)
四、自定義元類的使用
既然元類可以創(chuàng)建類,那也可以自定義元類,自定義直接繼承類type,在自定義元類的步驟:
1.定義一個類繼承type
2.重寫new方法
具體例子:
#定義一個類繼承type class Mytest(type): #重寫new方法 def __new__(cls,type_name,bases,atter,*args,**kwargs): new_cls=super().__new__(cls,type_name,bases,atter) return new_cls#返回新的類 M2=Mytest("M2",(Mytest,),{"atter":100}) print(M2)#=====》<class'__main__.M2'>
使用class創(chuàng)建類的時候指定自定義的元類
1.不去指定時,默認創(chuàng)建都是type類
2.指定自定義的元類去創(chuàng)建類:metaclass=指定的元類
class Myclass(type): """自定義的元類""" def __new__(cls,type_name,bases,attrs,*args,**kwargs): new_cls=super().__new__(cls,type_name,bases,attrs) print("這個是Myclass:",type_name,bases,attrs,) return new_cls #通過metaclass=xxxx繼承自定義元類 class Inherited_class(metaclass=Myclass): a=100 b=200 print(type(Inherited_class))#======》<class'__main__.Myclass'>
綜上所述,這篇文章就給大家介紹完畢,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/128849.html
摘要:測試對象是否為某類型返回以內(nèi)的倍數(shù)返回是一堆或者當為偶數(shù)時生成一個新列表將其加入中的,就是用定義的一個匿名函數(shù),并通過函數(shù),將其應(yīng)用到列表中的每個元素。 1.1 使用函數(shù) 在Python中,函數(shù)必須先聲明,然后才能調(diào)用它,使用函數(shù)時,只要按照函數(shù)定義的形式,向函數(shù)傳遞必需的參數(shù),就可以調(diào)用函數(shù)完成相應(yīng)的功能或者獲得函數(shù)返回的處理結(jié)果。 如果函數(shù)有返回值,那么需要在函數(shù)中使用retur...
摘要:類元編程是指在運行時創(chuàng)建或定制類的技藝。注意在中做元編程時最好不要用和函數(shù)。三元類基礎(chǔ)知識元類是類元編程最高級的工具使用元類可以創(chuàng)建具有某種特質(zhì)的全新變種,例如抽象基類。建議除非開發(fā)框架,否則不要在生產(chǎn)代碼中定義元類或抽象基類。 導語:本文章記錄了本人在學習Python基礎(chǔ)之元編程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、了解運行時創(chuàng)建...
摘要:什么是支持向量機支持向量機是一種有監(jiān)督的機器學習算法,可用于分類任務(wù)或回歸任務(wù)。支持向量機是一個最好地隔離兩個類超平面或者說分類線的前沿算法。接下來,我們將討論支持向量機如何工作。 showImg(https://segmentfault.com/img/remote/1460000019599694); 介紹 掌握機器學習算法并不是一個不可能完成的事情。大多數(shù)的初學者都是從學習回歸開...
摘要:什么是元類剛才說了,元類就是創(chuàng)建類的類。類上面的屬性,相信愿意了解元類細節(jié)的盆友,都肯定見過這個東西,而且為之好奇。使用了這個魔法方法就意味著就會用指定的元類來創(chuàng)建類了。深刻理解中的元類 (一) python中的類 今天看到一篇好文,然后結(jié)合自己的情況總結(jié)一波。這里討論的python類,都基于python2.7x以及繼承于object的新式類進行討論。 首先在python中,所有東西都...
閱讀 1067·2023-01-14 11:38
閱讀 1062·2023-01-14 11:04
閱讀 904·2023-01-14 10:48
閱讀 2380·2023-01-14 10:34
閱讀 1147·2023-01-14 10:24
閱讀 1026·2023-01-14 10:18
閱讀 655·2023-01-14 10:09
閱讀 733·2023-01-14 10:02