Python基礎(九) type元類

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

不前進,不倒退,中止的狀態是沒有的.

一塊兒進步,與君共勉,

相關文章
相關標籤/搜索