面向对象编程(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('我是最后一行代码了。。。')  #这里才会执行析构函数。  析构函数实在实例被销毁的时候执行。

猜你喜欢

转载自www.cnblogs.com/cslw5566/p/9072287.html