亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python實現動態創建類的方法分析

系統 1542 0

本文實例講述了python實現動態創建類的方法。分享給大家供大家參考,具體如下:

python作為動態語言,如何在運行時動態創建類呢(python Creating classes dynamically),這在編程時,有時候很有用處,動態生成類,給予相應的屬性和方法。通常來說有如下兩種方式:

  • 1. 根據條件,硬編碼實現。
  • 2. 利用 type metaclass? 來實現。

根據條件硬編碼

            
def choose_class(name):
 if name == 'foo':
  class Foo(object):
   pass
  return Foo # 返回一個類,而不是實例
 else:
  class Bar(object):
   pass
  return Bar
MyClass = choose_class('foo') 
print MyClass # 返回一個類,而不是實例
print MyClass() # 創建一個實例


          

運行后,結果為:


<__main__.Foo object at 0x00BA8370>

但其實這并不是那么動態,你還得在程序中寫完整個class的定義。既然class是對象,也必定可以由什么東西創建出來。在python中,當你用 class 關鍵字的時候,python將自動創建這個object, 有什么方法能手動創建呢,那就是 type 方法. 這是一個很特殊的方法,能夠創建一個類. type 的語法如下:

            
type(name of the class, 
  tuple of the parent class (for inheritance, can be empty), 
  dictionary containing attributes names and values)


          

按照這個語法規則,做如下例子:

            
def echo_msg(self):
 print self.msg
print '===dynamic create class==='+ '*'*50
MyClass = type('MyClass',(object,),{"a":123,"b":"summer","msg":"test message","echo_msg":echo_msg})
print MyClass.a
myclass = MyClass()
myclass.echo_msg()
print myclass.a,myclass.b
print '===dynamic create subclass==='+ '*'*50
MySubClass = type('MySubClass',(MyClass,),{"c":"c-value"})
print MySubClass.c,MySubClass.a,MySubClass.b
print issubclass(MySubClass, MyClass)
mysubclass = MySubClass()
mysubclass.echo_msg()


          

運行結果如下:

===dynamic create class===**************************************************
123
test message
123 summer
===dynamic create subclass===**************************************************
c-value 123 summer
True
test message

這個例子利用? type 創建了一個MyClass 類,然后又創建了 MySubClass 繼承了MyClass 類,并綁定了屬性,方法。MySubClass 也綁定自己特有的屬性,同時又繼承了基類的屬性,方法。

這樣就實現了,在python 中動態創建類,主要功臣就是 type 方法,為什么type 有這么厲害,其最終原因是:type 是 metaclass ,元類,用來創建類的類。打個比方:

            
Class=MetaClass()
instance=Class()


          

什么是 metaclass ,又將怎么利用呢,后面的文章將詳細講解 python metaclass.

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 伊人久久大香线蕉综合bd高清 | 日本人69视频页码jlzz | 天天射天天射天天射 | 美女精品| 亚洲欧美日韩综合在线 | 亚洲国产精品成人午夜在线观看 | 国产精品久久久久久久人热 | 亚日韩| 国产成人一区二区三区精品久久 | 波多野结衣中文无毒不卡 | 国产精品一区二区三区免费 | 成人欧美一区二区三区视频xxx | 在线播放国产一区二区三区 | 色哦色哦哦色天天综合 | 欧美视频色 | 精品一久久香蕉国产线看播放 | 国产精品久久久久久久免费大片 | 99久久精品国产免看国产一区 | 香蕉视频18 | 天天干天天操天天插 | 一级录像 | 免费观看日本高清a毛片 | 亚洲欧美一区二区三区在饯 | 亚洲区在线播放 | 精品久久在线 | 欧美 亚洲 中文字幕 | 日本成人二区 | 看免费一级片 | 干一干操一操 | 久久国产精品一国产精品 | 国产一级精品毛片 | 在线播放国产区 | 快射视频在线观看 | 四虎4hu影库免费永久国产 | 天天天天操| 爱插综合网 | 国产亚洲综合一区在线 | 欧美 日韩 中文 | 国内精品视频在线观看 | 精品国产午夜久久久久九九 | 日韩欧美亚洲国产 |