第一个问题,什么叫生命周期?
生命周期就是一个对象从产生到消亡的一个周期过程,总体来说是一个这样的
展示一下生命周期的一点点的小案例吧~
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()
静态方法就是不用传入参数,大概是这样的