[Python]利用type()動態創建類


 Python作為動態語言,可以動態地創建函數和類定義。比如說定義一個Hello類,就寫一個hello.py模塊:

 

#! /usr/bin/env python
#coding=utf-8
class Hello(object):
    def hello(self,name='world'):
        print("Hello,%s"%name)

當Python解釋器載入hello模塊時,會依次執行該模塊的所有語句,執行的結果就是動態創建了一個Hello的class對象:

 

from hello  import Hello
h = Hello()
h.hello()
print( type(Hello))
print (type(h))

Hello,world
<type 'type'>
<class 'hello.Hello'>

可以看到,Hello的class對象是type類型的,即Hello類是type()函數創建的。可以通過type()函數創建出Hello類,而無需class Hello(object)...這樣的定義:

 

def fn(self,name="world"):
    print("Hello,%s"%name)

Hello = type('Hello',(object,),dict(hello=fn))
h = Hello()
h.hello()
print(type(Hello))
print(type(h))


Hello,world
<type 'type'>
<class '__main__.Hello'>

 

要動態創建一個class對象,type()函數依次傳入3個參數:

1、class的名稱,字符串形式;

2、繼承的父類集合,注意Python支持多重繼承,如果只有一個父類,注意tuple的單元素寫法;

3、class的方法名稱與函數綁定,這里我們把函數fn綁定到方法名hello上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM