Python基礎(九) type元類


python元類:type()   

元類是python高階語法. 合理的使用可以減少大量重復性的代碼.

 

元類實際上做了以下三方面的工作:

 

  • 干涉創建類的過程
  • 修改類
  • 返回修改之后的類

 

為什么使用元類?

 

為什么要使用元類這種模糊且容易出錯的功能?
一般情況下,我們並不會使用元類,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(類名,基類元組(可以為空,用於繼承), 包含屬性或函數的字典)

 以下兩種寫法都可以:

type('Class',(object,),dict(hello=fun()))

type('Class',(object,),{"hello":fun()})

1、class 自定義的類名稱

2、(object,)是繼承類,的元組,如果只有一個就寫這種形勢(object,);多個(object,xxxx,)

3、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

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

一起進步,與君共勉,

 


免責聲明!

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



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