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