【发布时间】:2018-07-25 07:12:01
【问题描述】:
我正在寻找关于描述符不能是实例变量的理由,并找到了这个post。在@nneonneo 的回答中,他引用了 Python 邮件列表中的回答。我引用了here。
答案列出了我怀疑的两个原因:第一个原因,它说
如果“M”描述符是由某些实例而不是由类定义的,那么知道对象“reg”是 Register 的一个实例并不能告诉我任何关于“reg.M”是否是有效属性或一个错误。
但我的问题是,如果在__init__() 中定义了“M”描述符,那么它怎么会被 一些 实例定义?每个实例在初始化后都应该有一个“M”描述符属性。那么“reg.M”应该始终是有效属性。
第二个原因,ObjectHolder 示例,
而不是将“holder.obj”视为简单数据 属性,它将开始在访问时调用描述符协议 到“holder.obj”并最终将它们重定向到不存在的和 无意义的“holder.foo”属性,这肯定不是什么 预期课程的作者。
最初的问题是关于为什么描述符不能是实例变量,第二个原因只是使用现有机制来解释假设情况。我的意思是,如果描述符作为实例变量是有效的,那么应该有一些检查和转换来使其工作。我不认为你可以使用“描述符作为类变量”的机制来解释“描述符作为实例变量”,特别是后者现在不存在,也许可以开发成将来有效。
谢谢,
【问题讨论】:
标签: python descriptor