美文网首页
对 python 类声明周期的理解

对 python 类声明周期的理解

作者: 天空蓝雨 | 来源:发表于2020-09-10 09:20 被阅读0次

    先来个简单的例子:

    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(数字喽)。(嘿嘿,可以试试)

    總結,儅實力沒有被回收的時候,是可以通過id 來獲取到的,

    如果實力不存在的話,調用會返回一個錯誤的狀態嗎, 而不通常的 0,并且不可以使用這個實力了。

    相关文章

      网友评论

          本文标题:对 python 类声明周期的理解

          本文链接:https://www.haomeiwen.com/subject/fuckohtx.html