在Python中,__dict__实例似乎对某些类是"开放的",对其他类"封闭":
# "closed" type example:
x = object()
x.eggs = 'spam' # raises an AttributeError
Run Code Online (Sandbox Code Playgroud)
然而:
# "open" type example I:
x = Exception()
x.eggs = 'spam' # does not raise an AttributeError
# "open" type example II: subclasses
class thing(object): pass
x = thing()
x.eggs = 'spam' # does not raise an AttributeError
Run Code Online (Sandbox Code Playgroud)
我想了解这种行为差异的实施地点/方式/原因:为什么object关闭但是thing开放?为什么Exception开放?这个问题有两个原因:
在纯Python中,我发现复制"封闭"行为的唯一方法是实现__setattr__自己并AttributeError在其中引发,手动编写适当格式的错误消息.是否有一种不那么冗长,更干的方式(以及一种不会产生潜在误导性回溯的方式__setattr__)?
在我编写的IPC模块中,我想记录一个使用示例,最简洁和最通用的方法是找到一个内置的例子type(失败,一个来自标准库)(a)可以腌制并发送到另一个进程,(b)其实例表现出"开放"行为.到目前为止,我发现的最好的是Exception但在文档中看起来有点误导(人们会认为它是关于异常的).更通用的对象会更好,但是object关闭,除非将其定义保存在路径上的文件中,否则子类(thing如上例中所示)是不可能pickle的.也许某个地方的标准容器是开放的?经典(tuple/list/dict)都是封闭的.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |