欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2019年06月25日 10:18:14   作者:輕舞肥羊  
這篇文章主要介紹了python實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類的方法,結(jié)合實(shí)例形式分析了Python動(dòng)態(tài)創(chuàng)建類的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下

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

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

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

根據(jù)條件硬編碼

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

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

<class '__main__.Foo'>
<__main__.Foo object at 0x00BA8370>

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

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

按照這個(gè)語法規(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()

運(yùn)行結(jié)果如下:

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

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

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

Class=MetaClass()
instance=Class()

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

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

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 詳解MySQL數(shù)據(jù)類型int(M)中M的含義

    詳解MySQL數(shù)據(jù)類型int(M)中M的含義

    int(M)拆分來說,int是代表整型數(shù)據(jù)那,么中間的M應(yīng)該是代表多少位了,后來查mysql手冊(cè)也得知了我的理解是正確的,下面這篇文章小編就來舉例詳細(xì)說明。 文中介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面就來學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • python排序算法之選擇排序

    python排序算法之選擇排序

    這篇文章主要介紹了python排序算法之選擇排序,選擇排序表示從無序的數(shù)組中,每次選擇最小或最大的數(shù)據(jù),從無序數(shù)組中放到有序數(shù)組的末尾,以達(dá)到排序的效果,需要的朋友可以參考下
    2023-04-04
  • python使用cStringIO實(shí)現(xiàn)臨時(shí)內(nèi)存文件訪問的方法

    python使用cStringIO實(shí)現(xiàn)臨時(shí)內(nèi)存文件訪問的方法

    這篇文章主要介紹了python使用cStringIO實(shí)現(xiàn)臨時(shí)內(nèi)存文件訪問的方法,涉及Python使用cStringIO模塊操作內(nèi)存的技巧,需要的朋友可以參考下
    2015-03-03
  • Python 面向?qū)ο蟛糠种R(shí)點(diǎn)小結(jié)

    Python 面向?qū)ο蟛糠种R(shí)點(diǎn)小結(jié)

    這篇文章主要介紹了Python 面向?qū)ο蟛糠种R(shí)點(diǎn),總結(jié)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類、對(duì)象、實(shí)例等相關(guān)概念、原理與使用技巧,需要的朋友可以參考下
    2020-03-03
  • Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù)

    Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù)

    本文分享的是Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù),我們?cè)赑ython中使用lambda表達(dá)式來使用匿名函數(shù),回調(diào)函數(shù)即callback,先寫一個(gè)函數(shù),讓預(yù)先寫好的系統(tǒng)來調(diào)用,一個(gè)函數(shù)可以作為參數(shù)傳給另外一個(gè)函數(shù),或者一個(gè)函數(shù)的返回值為另外一個(gè)函數(shù),滿足其一則為高階函數(shù)
    2021-12-12
  • python實(shí)現(xiàn)在函數(shù)中修改變量值的方法

    python實(shí)現(xiàn)在函數(shù)中修改變量值的方法

    今天小編就為大家分享一篇python實(shí)現(xiàn)在函數(shù)中修改變量值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python3編碼問題 Unicode utf-8 bytes互轉(zhuǎn)方法

    Python3編碼問題 Unicode utf-8 bytes互轉(zhuǎn)方法

    今天小編就為大家分享一篇Python3編碼問題 Unicode utf-8 bytes互轉(zhuǎn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python?matplotlib?繪制散點(diǎn)圖詳解建議收藏

    Python?matplotlib?繪制散點(diǎn)圖詳解建議收藏

    在數(shù)據(jù)統(tǒng)計(jì)圖表中,有一種圖表是散列點(diǎn)分布在坐標(biāo)中,反應(yīng)數(shù)據(jù)隨著自變量變化的趨勢(shì)。這篇文章主要介紹了如何通過matplotlib繪制散點(diǎn)圖,需要的朋友可以參考一下
    2021-12-12
  • Pycharm連接遠(yuǎn)程服務(wù)器并遠(yuǎn)程調(diào)試的全過程

    Pycharm連接遠(yuǎn)程服務(wù)器并遠(yuǎn)程調(diào)試的全過程

    PyCharm 是 JetBrains 開發(fā)的一款 Python 跨平臺(tái)編輯器,下面這篇文章主要介紹了Pycharm連接遠(yuǎn)程服務(wù)器并遠(yuǎn)程調(diào)試的全過程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • python實(shí)現(xiàn)三子棋游戲

    python實(shí)現(xiàn)三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論