[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物件:
Hello,worldfrom hello import Hello h = Hello() h.hello() print( type(Hello)) print (type(h))
<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
Python 元類,type建立類物件
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