22python生命周期的一种案例

news2024/11/20 11:22:25

第一个问题,什么叫生命周期?

生命周期就是一个对象从产生到消亡的一个周期过程,总体来说是一个这样的

展示一下生命周期的一点点的小案例吧~

1、利用全局变量

#以下是一个python展示生命周期的方法过程
personCount = 0
class Person:
    def __init__(self):
        global personCount
        print('计数 + 1')
        personCount += 1
    def __del__(self):
        global personCount
        print('计数 - 1')
        personCount -= 1
    pass
p = Person()
p2 = Person()
print('当前的人的个数是%d'%personCount)
del p
print('当前的人的个数是%d'%personCount)

优点:这玩意确实能够计数

缺点:你再改一下,这个personCount会变,所以决定进行改变啦~~

2、第一个改变,就是把最后冗长的那个print放到函数的封装里面去!

personCount = 0
class Person:
    def __init__(self):
        global personCount
        print('计数 + 1')
        personCount += 1
    def __del__(self):
        global personCount
        print('计数 - 1')
        personCount -= 1
    def log(self):
        print('当前的人的个数是%d' % personCount)
        return personCount
p = Person()
# print(p.log())
print(p.log())
p.log()

有很多细节点值得注意:

1)最后调用了p.log()为啥会显示计数-1,哪里触发了del方法?

在这段代码中,当对象 p 调用 log() 方法时,会先打印当前的人的个数,然后返回 personCount。在调用 log() 方法时,personCount 的值为 1,所以会打印出 "当前的人的个数是1"。然后,由于没有其他引用指向对象 p,当 log() 方法执行完毕后,p 对象会被当作垃圾进行回收,从而触发 __del__() 方法,打印出 "计数 - 1"。

2)p.log()和print(p.log())有啥区别?

  • p.log()是调用对象p的log()方法,它可能会执行一些操作并返回一个值。如果log()方法有返回值,那么p.log()将返回这个值。

  • print(p.log())是将p.log()的返回值作为参数传递给print()函数,然后将其打印出来。print()函数会将传入的参数转换为字符串并打印出来。

总结起来,p.log()返回log()方法的返回值,而print(p.log())将log()方法的返回值打印出来。

3、运用静态方法去写一下这个案例

class Person:
    personCount = 0
    def __init__(self):

        print('计数 + 1')
        Person.personCount += 1
    def __del__(self):

        print('计数 - 1')
        Person.personCount -= 1
    @staticmethod
    def log():
        print('当前的人的个数是%d' % Person.personCount)
        return Person.personCount
p = Person()
p2 = Person()
Person.log()

静态方法就是不用传入参数,大概是这样的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

月薪过二万的Java面试

文章目录 📕我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五…

创新YOLOv5改进:结合全新可变形大核注意力(D-LKA Attention)实现多尺度目标涨点

🔥🔥🔥 提升多尺度目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: 🐤🐤�…

Java并发面试题:(一)线程的5种状态及转换

线程的状态转换 1、新建状态(New):新创建了一个线程对象。 2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位 于可运行线程池中,变得可运…

设计模式(1)-设计模式前置基础知识

1,设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexand…

三大方法快速发现商业规律

文章目录 三大方法快速发现商业规律一、市场调研二、数据分析三、案例分析 📕我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查…

新时代高效记账:自动化智能如何进行财务管理

随着科技的不断发展,自动化智能已经逐渐渗透到我们生活的各个领域。在财务管理中,自动化智能的应用显得尤为重要。它不仅可以提高财务管理的效率和精度,还能帮助我们更好地规划和掌控公司的财务状况 晨曦记账本提供了多种高效财务管理工具。…

【linux kernel】对linux内核设备的注册机制和查找机制分析

文章目录 1、简介2、device_initialize分析3、device_add分析4、总结 🔺【linux内核系列文章】 👉对一些文章内容进行了勘误,本系列文章长期不定时更新,希望能分享出优质的文章! 1、《linux内核数据结构分析之哈希表》…

冲刺十五届蓝桥杯P0006平面切分

文章目录 题目思路代码总结 题目 平面切分 思路 这道题是一个思维题把,之前没有接触过平面几何的知识,做起来感觉还是比较难的,用到的set集合和自己创建一个类 首先我们知道,一根直线A是可以将平面切分成两块的,如…

如何能优化网站开展速度

随着互联网技术的飞速发展,网站加载速度已经成为一个不可忽视的关键要素。 当您的网站速度缓慢,不仅会影响用户的访问体验,还可能导致用户的流失。以下是一些创新的技巧和策略,帮助您提升网站打开速度。 一、在图像压缩上做文章 …

ArcGIS JS API 演示Demo

ArcGIS JS API Demo演示地址 https://ralucanicola.github.io/JSAPI_demos/ ArcGIS JS API Demo下载地址 https://github.com/RalucaNicola/JSAPI_demos

PyTorch入门教学——使用PyCharm创建一个PyTorch项目

首先需要创建好PyTorch的虚拟环境,步骤:PyTorch入门教学——简介与环境配置-CSDN博客打开PyCharm,新建项目,选择项目的存放位置。选择先前配置的解释器,也就是虚拟环境中的解释器。(记住创建的虚拟环境所在…

1、资源包下载

1 、百度云盘永久下载地址 : 链接: https://pan.baidu.com/s/13pBco75qXU6bLxlTtZ29TQ 提取码: ixkg 2 、官方下载地址: https://dev.mysql.com/downloads/mysql/ 3 、注意:下载时候要选择自己的系统和对应的电脑 CPU 位数&a…

Multisim14 逻辑分析仪的使用教程(打开关闭+详细具体)

一、打开逻辑分析仪 总结:根据自身的分析需要选择分析的参数,保存并允许结果。然后根据参数的设置,看运行结果是否满足项目分析需要。 二、 关闭逻辑分析仪 最后,再次运行即可关闭逻辑分析仪了! 总结:如果…

LLM 系列 | 21 : Code Llama实战(上篇) : 模型简介与评测

引言 小伙伴们好,我是《小窗幽记机器学习》的小编:卖热干面的小女孩。 个人CSDN首页:JasonLiu1919_面向对象的程序设计,深度学习,C-CSDN博客 今天开始以2篇小作文介绍代码大语言模型Code Llama。上篇主要介绍Code Llama的基本情况并基于Hug…

Linux系统编程_文件编程第2天:写整数、结构体,fopen等

1. 文件编程小应用之修改程序的配置文件&#xff08;407.10&#xff09; FILE/demo14.c #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <s…

VSCode 调试 u-boot

文章目录 VSCode 调试 u-boot调试配置启动 u-boot 脚本调试界面重定向之后继续调试参考 VSCode 调试 u-boot 调试配置 参考 qemu基础篇——VSCode 配置 GDB 调试 要想调试 u-boot 只需要再添加一个 u-boot 的配置即可 {"version": "0.2.0","conf…

Python 机器学习入门之K近邻算法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 番外 Python 机器学习入门之K近邻算法 K近邻算法 系列文章目录前言一、K近邻算法简介1、定义2、用途 …

【Unity引擎核心-Object,序列化,资产管理,内存管理】

文章目录 整体介绍Native & Managed Objects什么是序列化序列化用来做什么Editor和运行时序列化的区别脚本序列化针对序列化的使用建议 Unity资产管理导入Asset Process为何要做引擎资源文件导入Main-Assets和 Sub-Assets资产的导入管线Hook&#xff0c;AssetPostprocessor…

对协议的基本认识

目录 前言 TCP网络计算器的模拟实现 制定协议 协议protocol的整体代码 TCP网络计算器的服务端类TcpServer TcpServer类的整体代码 TCP网络计算器的服务端 服务端CalServer.cc的整体代码 TCP网络计算器的客户端 客户端CalClient.cc的整体代码 对模拟实现的TCP网络计算…

匿名内部类的使用:(一看就会!!!)

知识点&#xff1a; 匿名内部类依旧是一个类&#xff0c;但是没有名字&#xff0c;同时还是一个对象&#xff1b;再类的内部&#xff1b; 使用方法指南&#xff1a; 先创建一个类&#xff0c;可以是接口、抽象类、普通父类需要明确声明关系 &#xff0c;父与子、实现接口、抽…