22python生命周期的一种案例

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

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

22python生命周期的一种案例_第1张图片

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

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会变,所以决定进行改变啦~~22python生命周期的一种案例_第2张图片

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()

22python生命周期的一种案例_第3张图片有很多细节点值得注意:

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()

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

你可能感兴趣的:(conch的代码学习,python,开发语言)