1. 程式人生 > >[Python]利用type()動態建立類

[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上。


REF:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820064557c69858840b4c48d2b8411bc2ea9099ba000

相關推薦

[Python]利用type()動態建立

        Python作為動態語言,可以動態地建立函式和類定義。比如說定義一個Hello類,就寫一個hello.py模組: #! /usr/bin/env python #coding=utf-8 class Hello(object): def hello(

python type()動態建立

type()函式可以檢視一個型別或變數的型別,Hello是一個class,它的型別就是type,而h是一個例項,它的型別就是class Hello。 我們說class的定義是執行時動態建立的,而建立class的方法就是使用type()函式。 type()函式既可以返回

Python基礎筆記_Day12_Python元type動態建立Python動態建立方法、Python運算子、Python發郵件、簡訊

Day12_Python元類、type動態建立類、Python動態建立方法、Python運算子過載、Python發郵件、簡訊 12.01_Python語言基礎(類物件)(熟悉) 12.02_Python語言基礎(動態建立類)(熟練) 12.03_Python語言基礎(type建立類)(熟

python動態建立

場景 python是一門動態語言,開發者可以再執行時,建立新的型別。其場景: 依據遠端伺服器功能而建立一個新類,呼叫伺服器支援什麼類和方法。舉個列子: ('/cat/meow', '/cat/eat', '/cat/sleep', '/dog/bark'

Python面試常用的高階用法,怎麼動態建立

本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是Python專題的第16篇文章,今天我們來聊聊Python當中的元類。 元類是Python當中的高階用法,如果你之前從來沒見過這個術語或者是沒聽說過這個概念,這是非常正常的,因為一方面它的使用頻率不高,另外一方面就是它相對不太容易

設計模式學習(十四)————抽象工廠模式(使用Qt框架的反射技術——根據字串動態建立來實現)

抽象工廠模式:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類! 這個例子也可以用簡單工廠模式+反射+讀取配置檔案來完成,這樣更加簡潔!!! 普通的抽象工廠模式 下面通過一個模擬訪問資料庫的例子來進行說明: #ifndef US

Python利用{}.fromkeys來建立空字典的時候要注意附預設值時其他鍵會同時變化

coefficients = {} coefficients_keys = [] for k in range(0, len(compound_middle)): coefficients_keys.append(compound_middle[k][0]) coe

Python 使用type來定義

我們先來看一張圖仔細觀察:    我們使用 class 定義了 Class類,然後例項化給 cls    觀察cls的型別,它的型別指向 Class    那麼Class的型別指向誰呢?指向type仔細思考,會不會Class是由type來定義的呢?是的,其實Class是由 t

Python】 如何動態新增屬性與方法

一些概念 涉及到一些基礎概念,本章要討論的相關術語。但是有些概念又是一時半會講不清楚,所以筆者儘量找到簡練形象的描述,並附上參考連結。  物件 屬性 方法 類 例項 物件(object):在面向物件程式設計中(OPP),萬物都是物件。物件應該具有屬

Groovy動態建立、方法合成、方法委託

/** * 動態生成類 */ def expando = new Expando(name : 'hello',fun1:{int a,int b -> a*b}) expando.height = 100 expando.fun2 = { int a,i

Python技巧:元(Metaclasses)和利用Type構建的動態(Dynamic Classes)

`metaclass`和`type`關鍵字在Python程式碼中較少被使用(也正因如此,它們的作用也沒有很好的被理解)。在這篇文章中,我們將探究`type()`的型別(types)和跟`metaclasses`相關的`type`的用法。 這是我的型別麼?首先來看`ty

Pythontype建立物件

type("123")  可以檢視變數的型別;同時 type("類名",(父類),{類屬性:值,類屬性2:值}) 可以建立一個類。 在Python中不建議一個函式具有不同的功能(過載);type()具有不同的功能是為了相容之前的版本。 類可以建立例項物件,類物件是由元類建立的。 (

python利用企業微信api來進行發送自定義報警的實現

python 微信報警python利用企業微信api來進行發送自定義報警的類實現企業微信註冊打開http://work.weixin.qq.com/企業微信主頁;點擊企業註冊;填寫相關信息,營業執照和註冊號可以不用填,直接下一步,按照提示操作即可;註冊完成後,登陸,就顯示如下界面:點擊我的企業標簽:看到如上界

Python機器學習筆記:利用Keras進行多分類

名稱 encoder 創建 numeric 種類 deep ast 4.0 允許   Keras是一個用於深度學習的Python庫,它包含高效的數值庫Theano和TensorFlow。   本文的目的是學習如何從csv中加載數據並使其可供Keras使用,如何用神經網絡建立

python利用定義實現迭代器協議

1.具有__ next__和__ iter__方法的物件即被視為迭代器,其中next方法每執行一次返回迭代的下一項,而iter方法可以把物件變成迭代器. 執行for迴圈的本質即是先對物件使用iter方法, 然後不斷使用next方法,直到報出StopIteration. 故可直接在類中定義這兩

通過Python利用ADSL伺服器和tinyproxy構建資料自己的動態代理IP池,用django+redis做web服務 (優化版)

代理池初始版:https://blog.csdn.net/MeteorCountry/article/details/82085238 上一篇文章中所搭建的代理池在使用過程中出現了點小問題,代理池中莫名的多出了一些無效代理,檢查日誌後返現是在更新代理 池時舊的代理IP沒有刪除成功,就添加了新

通過Python利用ADSL伺服器和tinyproxy構建資料自己的動態代理IP池,用django+redis做web服務,提供IP介面

應公司業務需求需要在一些地方使用代理,要求連通率高,速度快,最主要的還要便宜,對比多家供應商後,最後還是決定自購撥號服務搭建代理IP池。 需要配置:1.一臺或多臺adsl伺服器(用以提供IP,可網上購買,通過ssh同域名連線)2.一臺正常固定IP伺服器擁來搭建IP代理池。(統一配置:python

python 學習彙總65:eval,exec動態建立程式碼(初級學習- tcy)

eval,exec動態建立程式碼 2018 / 6 / 16 ==================================================================== 1.1.eval(expression, globals=None, locals=

Python利用來控制實例創建

解決 lan singleton blog 定制化 http none reat ins 問題: 改變實例創建方式,以此來實現單例模式,緩存或者其他類似的特性。 解決方法: 如果想定制化創建實例的過程,可以通過定制一個元類並以某種方式重新實現它的__call__()

利用反射機制建立工具對資料進行加密和解密

對資料庫的資料進行加密,包括使用者資料、專案資料、聊天資料等,需要在插入表的的時候進行加密,查詢的時候進行解密。利用java的反射機制,建立以下工具類,對資料進行加解密。 public class CryptoUtil { /** * 加密、解密方法 * @param ob