python元類:type() python
元類是python高階語法. 合理的使用能夠減小大量重複性的代碼.mysql
元類實際上作了如下三方面的工做:sql
爲何要使用元類這種模糊且容易出錯的功能?
通常狀況下,咱們並不會使用元類,99%的開發者並不會用到元類,因此通常不用考慮這個問題。
元類主用用於建立API,一個典型的例子就是Django的ORM。
它讓咱們能夠這樣定義一個類:數據庫
class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField()
運行下面的代碼:函數
guy = Person(name='bob', age='35') print(guy.age)
返回的結果是int
類型而不是IntegerField
對象。這是由於models.Model
使用了元類,它會將Python中定義的字段轉換成數據庫中的字段。
經過使用元類,Django將複雜的接口轉換成簡單的接口。學習
原型:type(類名,基類元組(能夠爲空,用於繼承), 包含屬性或函數的字典)
fetch
如下兩種寫法均可以:spa
type('Class',(object,),dict(hello=fun()))code
type('Class',(object,),{"hello":fun()})對象
一、class 自定義的類名稱
二、(object,)是繼承類,的元組,若是隻有一個就寫這種形勢(object,);多個(object,xxxx,)
三、dict(hello=fun()) 或 {"hello":fun()} 第三個參數,是一個字典等號左是 自定義的方法名,右側是已寫好的方法名,這個要注意,有參數且沒有默認值的狀況下,要加括號;
def fun(): print('hello world!') if __name__=="__main__": h = type('Hello',(object,),dict(hello=fun())) tc = h() tc.hello
引用:
h 至關於接收Hello類;tc = h()實例化類;tc.hello方法,調用的實際上是咱們定義的fun方法。
Hello = type('Hello',(object,),dict(hello=fun())) tc = Hello() tc.hello
type()動態建立類後,還能夠添加更多的方法和屬性:
def mysql(): conn = pymysql.connect(host='127.0.0.1',port=3306 ,user='root' ,passwd='q123456' ,db='amsql' ) cur = conn.cursor() sql = "SELECT * FROM amt_case_interface_table" ret = cur.execute(sql) print(cur.fetchmany(3)) #conn.commit() cur.close() conn.close()
Hello.mysql = mysql()
調用:
tc.mysql
Linux and python學習交流1,2羣已滿.
Linux and python學習交流3羣新開,歡迎加入,一塊兒學習.qq 3羣:563227894
不前進,不倒退,中止的狀態是沒有的.
一塊兒進步,與君共勉,