面向對象編程(2)self的含義,析構函數,數據庫類練習
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的含義,析構函數,數據庫類練習