日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python實現(xiàn)動態(tài)創(chuàng)建類的方法分析

系統(tǒng) 1781 0

本文實例講述了python實現(xiàn)動態(tài)創(chuàng)建類的方法。分享給大家供大家參考,具體如下:

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

  • 1. 根據(jù)條件,硬編碼實現(xiàn)。
  • 2. 利用 type metaclass? 來實現(xiàn)。

根據(jù)條件硬編碼

            
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() # 創(chuàng)建一個實例


          

運行后,結(jié)果為:


<__main__.Foo object at 0x00BA8370>

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

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


          

按照這個語法規(guī)則,做如下例子:

            
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()


          

運行結(jié)果如下:

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

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

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

            
Class=MetaClass()
instance=Class()


          

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

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O計入門與進階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進階經(jīng)典教程》

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


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 莒南县| 西畴县| 商城县| 浦北县| 乌什县| 金门县| 新邵县| 龙南县| 洪泽县| 孟津县| 滦南县| 青海省| 苏尼特左旗| 黄山市| 阜城县| 南漳县| 浪卡子县| 方城县| 清涧县| 杨浦区| 章丘市| 横山县| 洛浦县| 浮山县| 葫芦岛市| 凤山县| 清新县| 安阳市| 上杭县| 泗洪县| 新巴尔虎右旗| 东丽区| 城市| 亚东县| 黄石市| 慈溪市| 澄江县| 枣庄市| 拉萨市| 桓台县| 申扎县|