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

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條評論
主站蜘蛛池模板: 精品一区二区三区免费视频 | 久久永久免费中文字幕 | 中文字幕在线观看日韩 | 日韩一级黄色影片 | 色偷偷成人网免费视频男人的天堂 | 99r精品| 久久久久久久综合色一本 | 四虎影视8848a四虎在线播放 | 久久精品*5在热 | 99视频在线免费看 | 激情综合网色播五月 | 久久九九影视 | 精品国产乱码一区二区三区 | 一级片影院 | 免费视频不卡 | 99在线影院 | 香蕉久久精品国产 | 一级淫片免费看 | 久久综合九色综合97伊人麻豆 | 97se亚洲综合自在线尤物 | 日日干夜夜干 | 久久99精品久久久久久水蜜桃 | 神马影院我不卡手机版 | 在线免费黄色片 | 一级片在线观看免费 | 人人做天天爱夜夜爽中字 | 2021久久伊人精品中文字幕有 | 日韩精品国产自在久久现线拍 | 欧美一区二区高清 | 成人9久久国产精品品 | 亚洲天堂一区二区三区 | 久久毛片 | 久久99久久99精品免观看 | 免费超级淫片日本高清视频 | 欧美高清不卡午夜精品免费视频 | 天天干天天噜 | 澳门成人免费永久视频 | 亚洲h在线观看 | 91综合久久婷婷久久 | 色婷婷久久久swag精品 | 日本天天谢天天要天天爱 |