当前位置: 首页 > news >正文

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('我是最后一行代码')#执行完最后一行代码,数据库连接关闭

转载于:https://www.cnblogs.com/fenggf/p/9103165.html

相关文章:

  • SQL Server查询优化方法(查询速度慢的原因很多,常见如下几种)
  • Java入门 | 如何傻瓜式的安装JDK和配置环境变量?
  • git 比较 change to be committed
  • MySQL DDL--ghost工具学习
  • Vue父子组件传值 | 父传子 | 子传父
  • 【转】奇异值分解(SVD)原理详解及推导
  • MaxCompute studio FAQ
  • dubbo-admin2.8.4部署
  • 时间选择控件YearPicker(基于React,antd)
  • MicroPython支持图形化编辑了:Python Editor带你轻松玩转MicroPython
  • 负载均衡【nginx反向代理】
  • python----文件读写
  • Tensorflow 学习笔记(一)TensorFlow入门
  • [Usaco2012 Dec]First! BZOJ3012
  • 前台jsp从session中拿值
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【刷算法】从上往下打印二叉树
  • 78. Subsets
  • CSS实用技巧
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • npx命令介绍
  • Redis 中的布隆过滤器
  • Terraform入门 - 1. 安装Terraform
  • 多线程 start 和 run 方法到底有什么区别?
  • 简单数学运算程序(不定期更新)
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端_面试
  • 区块链技术特点之去中心化特性
  • 深入浅出Node.js
  • 说说动画卡顿的解决方案
  • 小程序 setData 学问多
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • (+4)2.2UML建模图
  • (04)odoo视图操作
  • (1)Android开发优化---------UI优化
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (4)STL算法之比较
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (超详细)语音信号处理之特征提取
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (算法设计与分析)第一章算法概述-习题
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .java 9 找不到符号_java找不到符号
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET MVC 验证码
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)