1. 程式人生 > >面向對象編程(2)self的含義,析構函數,數據庫類練習

面向對象編程(2)self的含義,析構函數,數據庫類練習

一行代碼 pan host port @property sel hal toc dict

1.類的聯系使用

class Baby():

country = ‘China‘ #類變量,公共的變量,每個實例可以用 對於公共的東西可以定義節省內存

def my(self):

self.name = ‘牛寒陽‘ #name 是屬性 是本類對象

def cry(self): # 實例方法

print(‘哇哇哇‘)

@property

def hhh(self):

return 198

@classmethod

def xm(cls):#cls代表的就是baby

print(cls.country)

print(‘我是類方法‘)

@staticmethod

def xh():

print(‘這個是靜態方法,它和一個沒寫在類裏面的函數一樣‘)

****

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

#1、不實例化,直接用類名調用這個xm的方法

#2、實例化之後,在通過實例化之後的對象調用xm方法,看看可以不 實例化會傳遞內存地址給類,所以通過不同的內存地址取得不同實例的值(self就是指內存地址本身)

#你不想實例化的時候,就可以定義成類方法

#靜態方法就是一個普通函數,只不過是寫在類裏面而已,它用不了類變量、類方法、實例變量、實例方法

# Baby.xh()

# Baby.country=‘USA‘ #類變量是可以直接通過類名.xxx來進行修改的。

#

# dcg = Baby()

# # dcg.country = ‘Japan‘

# print(dcg.country)

# yjt = Baby()

# print(yjt.country)

# b = Baby()

# print(b.hhh)

# dcg = Baby(‘春光‘)

# print(‘董春光的內存的‘,id(dcg)) **self的內存地址和改內存地址一樣。

# zll = Baby(‘張流量‘)

# print(‘董春光的內存的‘,id(zll)) **self的內存地址和改內存地址一樣

2.利用類來改寫數據庫連接

import pymysql

class 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,#自動提交

)

except Exception as e:

print(‘數據庫連接失敗!%s‘%e)

else:

self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor) #這樣返回的就是字典

def ex_sql(self,sql):

try:

self.cur.execute(sql)

except Exception as e:

print(‘sql語句有問題,%s‘%sql)

else:

self.res = self.cur.fetchall()

return self.res

###

析構函數
def __del__():
pass
實例被銷毀的時候執行的。
######

my = MyDb(‘118.24.3.40‘,‘jxz‘,‘123456‘,‘jxz‘)

my.ex_sql(‘select * from stu;‘)

print(my.res)

print(‘我是最後一行代碼了。。。‘) #這裏才會執行析構函數。 析構函數實在實例被銷毀的時候執行。

面向對象編程(2)self的含義,析構函數,數據庫類練習