zoukankan      html  css  js  c++  java
  • Python3学习笔记-构造函数与析构函数

    构造函数:__init__(self), 这个方法就是构造函数,在实例化的时候自动调用。

        所有如果这个函数内有打印的方法,当实例出来的时候会打印里面的信息。

         __init__方法的第一个参数永远都是self,表示创建实例本身,在__init__方法内部,可以把各种属性绑定到self,因为self指向创建的实例本身。

        有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去。

    def __init__():
            pass
    class Baby:
        def __init__(self,name):#构造函数
            self.name = name
        def cry(self):
            self.action = '哭了'
            print(self.action)
    feng = Baby('小红')
    print(feng.name)#实例化时构造函数自动执行,
    print(feng.action)#cry方法未被执行,直接调用feng.action会报错,object has no attribute对象没有该属性

    由于cry方法未被执行,直接调用feng.action会报错,object has no attribute对象没有该属性。解决方法有:

    (1)在实例化对象后,先调用cry这个方法,在去打印feng.action属性

    class Baby:
        def __init__(self,name):#构造函数
            self.name = name
        def cry(self):
            self.action = '哭了'
            print(self.action)
    feng = Baby('小红')
    feng.cry()#先调用cry这个方法
    print(feng.action)

    (2)将cry这个方法放在构造函数里,这样实例化的时候函数会被执行,feng.action属性就生成了

    class Baby:
        def __init__(self,name):#构造函数
            self.name = name
            self.cry()#将cry这个方法放在构造函数里
        def cry(self):
            self.action = '哭了'
            print(self.action)
    feng = Baby('小红')
    print(feng.action)

    析构函数:__del__(self), 这个方法就是析构函数,是在实例被销毁时自动调用的。

        当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。

        析构函数:实例被销毁的时候执行的,不是必须

     def __del__():
            pass
    import pymysql
    class MySQL(object):
        def __init__(self,host,user,passwd,db,port=3306,charset='utf8'):#构造函数,类实例化的时候执行
            try:
                self.conn = pymysql.connect(
                    host = host,user=user,passwd=passwd,db=db,port=port,charset=charset,
                    autocommit=True  # 自动提交,执行insert,update语句时,可以自动提交
                )
            except Exception as e:
                print('数据库连接失败,%s'%e)
            else:
                self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
        def __del__(self):#析构函数,实例被销毁的时候执行
            self.cur.close()
            self.conn.close()
            print('数据库连接关闭')
        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 #有没有返回值都可以
    my = MySQL('127.0.0.1', 'root', '123456', 'data')
    my.ex_sql('select * from stu')
    print(my.res)#可以用实例属性取值
    # print(my.ex_sql('select * from stu'))#也可以用实例方法的返回值
    print('我是最后一行代码')#执行完最后一行代码,数据库连接关闭
  • 相关阅读:
    JavaScript对原始数据类型的拆装箱操作
    Javascript继承(原始写法,非es6 class)
    动态作用域与词法作用域
    自行车的保养
    探索JS引擎工作原理 (转)
    C语言提高 (7) 第七天 回调函数 预处理函数DEBUG 动态链接库
    C语言提高 (6) 第六天 文件(续) 链表的操作
    C语言提高 (5) 第五天 结构体,结构体对齐 文件
    C语言提高 (4) 第四天 数组与数组作为参数时的数组指针
    C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
  • 原文地址:https://www.cnblogs.com/fenggf/p/9103165.html
Copyright © 2011-2022 走看看