成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python超詳細(xì)的講解元類應(yīng)用

89542767 / 397人閱讀

  在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

03.png

  三、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)

02.png

  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)

01.png

  四、自定義元類的使用


  既然元類可以創(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

相關(guān)文章

  • 自定義函數(shù)

    摘要:測(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...

    SimpleTriangle 評(píng)論0 收藏0
  • Python中的元編程

    摘要:類元編程是指在運(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)建...

    alexnevsky 評(píng)論0 收藏0
  • PHPer書單

    摘要:想提升自己,還得多看書多看書多看書下面是我收集到的一些程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧當(dāng)然,如果你有好的書想分享給大家的或者覺得書單不合理,可以去通過進(jìn)行提交。講師溫銘,軟件基金會(huì)主席,最佳實(shí)踐作者。 想提升自己,還得多看書!多看書!多看書!下面是我收集到的一些PHP程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧!當(dāng)然,如果你有好的書想分享給大家的或者...

    jimhs 評(píng)論0 收藏0
  • 一個(gè)簡(jiǎn)單的案例帶你了解支持向量機(jī)算法(Python代碼)

    摘要:什么是支持向量機(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í)回歸開...

    Jrain 評(píng)論0 收藏0
  • python 和元(metaclass)的理解和簡(jiǎn)單運(yùn)用

    摘要:什么是元類剛才說了,元類就是創(chuàng)建類的類。類上面的屬性,相信愿意了解元類細(xì)節(jié)的盆友,都肯定見過這個(gè)東西,而且為之好奇。使用了這個(gè)魔法方法就意味著就會(huì)用指定的元類來創(chuàng)建類了。深刻理解中的元類 (一) python中的類 今天看到一篇好文,然后結(jié)合自己的情況總結(jié)一波。這里討論的python類,都基于python2.7x以及繼承于object的新式類進(jìn)行討論。 首先在python中,所有東西都...

    zhangqh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<