码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 22python生命周期的一种案例


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

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

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

    1、利用全局变量

    1. #以下是一个python展示生命周期的方法过程
    2. personCount = 0
    3. class Person:
    4. def __init__(self):
    5. global personCount
    6. print('计数 + 1')
    7. personCount += 1
    8. def __del__(self):
    9. global personCount
    10. print('计数 - 1')
    11. personCount -= 1
    12. pass
    13. p = Person()
    14. p2 = Person()
    15. print('当前的人的个数是%d'%personCount)
    16. del p
    17. print('当前的人的个数是%d'%personCount)

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

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

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

    1. personCount = 0
    2. class Person:
    3. def __init__(self):
    4. global personCount
    5. print('计数 + 1')
    6. personCount += 1
    7. def __del__(self):
    8. global personCount
    9. print('计数 - 1')
    10. personCount -= 1
    11. def log(self):
    12. print('当前的人的个数是%d' % personCount)
    13. return personCount
    14. p = Person()
    15. # print(p.log())
    16. print(p.log())
    17. 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、运用静态方法去写一下这个案例

    1. class Person:
    2. personCount = 0
    3. def __init__(self):
    4. print('计数 + 1')
    5. Person.personCount += 1
    6. def __del__(self):
    7. print('计数 - 1')
    8. Person.personCount -= 1
    9. @staticmethod
    10. def log():
    11. print('当前的人的个数是%d' % Person.personCount)
    12. return Person.personCount
    13. p = Person()
    14. p2 = Person()
    15. Person.log()

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

  • 相关阅读:
    【JAVA练习-----集合API】练习ArrayList 集合、Iterator 迭代器、foreach循环、HashSet的使用。
    【电子通识】USB接口三大类型图册
    设计模式(二)-创建者模式(3)-抽象工厂模式
    计算机毕业论文微信小程序毕业设计SSM校园生活小助手+后台管理系统|前后分离VUE校园网站[包运行成功]
    2022年IB TOK新题介绍
    C++的类型转换
    Java | abstract关键字【面向对象的第三大特征——多态】
    网络安全——SQL注入之安全狗bypass深度剖析
    Vivado 开发笔记(1)
    翻开spring源码横看竖看,满屏只有四个字,看不懂啊。幸好我有大神的深度剖析spring源码,轻松看懂
  • 原文地址:https://blog.csdn.net/weixin_44528463/article/details/133831082
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号