先来个简单的例子:
class xx():
def __new__(cls, *args, **kwargs):
print("实例穿件")
return super(xx, cls).__new__(cls, *args, **kwargs)
def __init__(self, *args, **kwargs):
print("实例初始化")
def __del__(self, *args):
print("实例被删除了")
a = xx()
实例穿件
实例初始化
del a
实例被删除了
注意:上面是在 jupyter 里面测试的,所以需要手动 del a ,实例才会被删除的。
另一种情况,就是 在 ide 中,如下图:
ide 文件运行后,会自动回收实例的 a, 那实例没有引用也就自然被删除了 直接执行实例,但是没有被引用,那就立刻被删除了
从这点就看出来了,实例的声明周期遵守 python 引用计数和 隔代回收的原则的。
参考理解:
https://segmentfault.com/q/1010000015687362
其实我们可以通过实例的 id ,来使用他,前提是,这个实例还没有会回收
id = id(xx对象)
_ctypes.PyObj_FromPtr(id) # 拿到 id 对应的对象
所以,如果缓存session 存不了 实例(因为无法序列化),也许可以考虑使用 保存实例的id(数字喽)。(嘿嘿,可以试试)
网友评论