python學習(二十九)類方法串連資料庫及物件導向編程(2)

來源:互聯網
上載者:User

標籤:fetchall   ict   @class   imp   print   建構函式   檔案   passwd   IV   

1、類方法串連資料庫

先說一下解構函式

 def __del__(self):    pass

解構函式,在執行個體被銷毀的時候執行,那麼對於串連資料庫,在執行個體執行後,需要關閉遊標和資料庫連接,這兩個操作就可以放到解構函式裡面

import pymysqlclass Mydb(object):    def __del__(self):  #解構函式,執行個體被銷毀的時候執行的        self.cur.close()        self.coon.close()        print(‘over‘)    def __init__(self,host,user,passwd,db,                 port=3306,charset=‘utf8‘):        try:            self.coon=pymysql.connect(                     host=host,user=user,passwd=passwd,port=port,                     charset=charset,db=db,autocommit=True                     )  #autocommit 自動認可,寫語句的時候自動認可        except Exception as e:            print(‘資料庫連接失敗!%s‘%e)        else:            self.cur=self.coon.cursor(cursor=pymysql.cursors.DictCursor)    def exsql(self,sql):        try:            self.cur.execute(sql)        except Exception as e:            print(‘sql語句有問題,%s‘%sql)        else:            self.res=self.cur.fetchall()            return self.resmy=Mydb(‘xxx‘,‘jxz‘,‘123456‘,‘jxz‘)my.exsql(‘select * from stu;‘)print(‘我是最後一行代碼‘)

在建構函式裡,進行資料庫連接,並做異常處理,在執行sql語句函數中進行sql語句執行,解構函式中操作關閉遊標和資料庫連接。

在串連資料庫的時候,有一個新的知識點:autocommit=True     自動認可,這個在以前寫的資料庫連接使用中並未提到,代替了之前需要判斷是否是select語句,是否需要提交。

2、if __name__==‘__main__‘用法

if __name__==‘__main__‘:
一般在做測試或者調試的時候用
如果是直接運行這個python檔案,這句話就沒有什麼用處

正常在python檔案中匯入其他python檔案,且該python檔案會正常執行

但是如果匯入的python檔案裡有 if __name__==‘__main__‘: 這個執行結果,那麼匯入的這個python檔案就不會執行

3、類變數,執行個體變數及執行個體方法

1)概念

類變數: 公用的變數,每個執行個體都可以用

執行個體變數:成員變數

執行個體方法:執行個體化後才能用

2)self

self代表的是本類對象,因為函數裡面的變數都是局部變數,出了函數就不能用了,用self給對象綁定了之後,就可以self.xx隨便用了

self與執行個體對象的記憶體位址是一樣的

class Baby():    def __init__(self,name):        print(‘self的記憶體位址‘,id(self))dcg=Baby(‘測試‘)print(‘測試的記憶體位址‘,id(dcg))

輸出結果為:

self的記憶體位址 801098625712測試的記憶體位址 801098625712
3)類變數,執行個體變數及執行個體方法使用
class Baby():    country =‘China‘  #類變數,公用的變數,每個執行個體都可以用    def my(self):        self.name=‘liujia‘abc=Baby()    print(abc.country)  #使用類變數的值Baby.country=‘USA‘  #類變數可以直接通過類名.xxx來進行修改yjt=Baby()print(yjt.country)   #類變數已經修改為USAdcg=Baby()dcg.country=‘Japan‘  #執行個體變數print(dcg.country)

 

看以上這段代碼,country變數是類下面,但沒有在其他函數裡面,是類變數,每個執行個體都可以用;

my()函數是一個執行個體方法,在執行個體化後才能使用;

先看執行個體化為abc後,列印country,那麼使用的是類變數,輸出為China;然後類變數進行了修改,這時候執行個體化為yjt,輸出的country就是USA,最後執行個體化為

dcg,這個執行個體修改了country的值,最後輸出的country就是Japan。

4)裝飾器 4、類方法,靜態方法1)概念

類方法:

不用執行個體化就可以直接調用

可以通過cls使用類變數

不能調用執行個體方法

不想執行個體化的時候,可以定義成類方法

靜態方法:

一個普通函數,只是寫在類裡面,用不了類變數,類方法,執行個體變數和執行個體方法

2)類方法
class Baby():    country =‘China‘  #類變數,公用的變數,每個執行個體都可以用    @classmethod    def xm(cls):#cls代表的就是Baby,類方法        print(cls.country)        print(‘我是類方法‘)

類方法可以不用執行個體化,直接調用

Baby.xm()   #不執行個體化,直接類名調用xm這個方法

輸出結果為:

China我是類方法

當然也可以先執行個體化,再調用

dcg=Baby()dcg.xm()  #執行個體化後,在通過執行個體化後的對象調用xm方法

輸出也是一樣的

還有一點是,類方法裡面不能調用執行個體變數和執行個體方法,比如

class Baby():    country =‘China‘  #類變數,公用的變數,每個執行個體都可以用    def my(self):        self.name=‘liujia‘    def cry(self):        print(‘hhh‘)    @classmethod    def xm(cls):#cls代表的就是Baby,類方法        print(cls.country)        print(‘我是類方法‘)        cls.name    #調用不了執行個體變數        cls.cry()#調用不了執行個體方法Baby.xm()  

不管是cls.name,還是cls.cry(),但是會運行報錯的

3)靜態方法
class Baby():    @staticmethod     #靜態方法     def xh():            print(‘這是靜態方法,它和一個沒寫在類裡面的函數一樣‘)

可以注意到這個類裡面的函數是沒有self這個本類對象的,它就是一個普通的函數,但是也還是需要執行個體化後才能調用

並且調用執行個體變數,執行個體方法等都是不可以的

class Baby():    country =‘China‘  #類變數,公用的變數,每個執行個體都可以用    def my(self):        self.name=‘liujia‘    def cry(self):        print(‘hhh‘)     @staticmethod     #靜態方法    def xh():        print(‘這是靜態方法,它和一個沒寫在類裡面的函數一樣‘)        self.name        self.cry()

self.name和self.cry()但是會報錯的

 

 

 

 

python學習(二十九)類方法串連資料庫及物件導向編程(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.