栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

__del__上的Python attributeError

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

__del__上的Python attributeError

您的

__del__
方法假定该类在被调用时仍然存在。

这个假设是不正确的。

Groupclass
当您的Python程序退出时,已被清除,现在设置为
None

测试是否仍然首先存在对该类的全局引用:

def __del__(self):    if Groupclass:        Groupclass.count -= 1

或用于

type()
获取本地参考:

def __del__(self):    type(self).count -= 1

但是请注意,这意味着

count
更改的语义
Groupclass
是子类的(每个子类都有一个
.count
属性,而不是只有
Groupclass
一个
.count
属性)。

__del__
挂钩文档中引用:

警告
:由于在不稳定的情况下

__del__()
调用方法,在执行过程中发生的异常将被忽略,并显示警告
sys.stderr
。同样,当
__del__()
响应于模块被删除而被调用时(例如,当执行程序时),该
__del__()
方法引用的其他全局变量可能已经被删除或正在被拆除(例如,进口机械关闭)
)。为此原因,
__del__()
方法应做到维持外部不变性所需的绝对最小值。从版本1.5开始,Python保证在删除其他全局变量之前,先从其模块中删除名称以单个下划线开头的全局变量。如果不存在对此类全局变量的其他引用,则这可能有助于确保在
__del__()
调用该方法时导入的模块仍然可用。

如果您使用的是Python 3,则还有两个附加说明:

  • CPython 3.3自动将随机哈希盐应用到字典中

    str
    使用的键
    globals
    ;这也影响清理全局变量的顺序, 可能 是您仅在 某些 运行中看到了问题。

  • None
    根据安全对象完成,CPython 3.4不再将全局变量设置为(在大多数情况下);参见PEP 442。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633778.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号