最近,我一直在学习Python中的托管属性,以及具有属性和描述符的共同主题,它们必须被指定为类属性。但是我无处可以找到解释为什么,特别是为什么它们不能被指定为实例属性的解释。所以我的问题实际上有两个部分:
答案 0 :(得分:3)
这是因为Python尝试解析属性的方式:
Voila; - )
我刚发现this link比我更好地解释了它。
另一个不错的illustration。
答案 1 :(得分:0)
为什么属性/描述符实例必须是类属性?
他们不会拥有,他们就是。这是一个设计决策,可能有更多的理由来支持它(简化实现,将类与对象分离)。
为什么属性/描述符实例不能是实例属性?
它们可以是,您可以始终覆盖__getattribute__
,以便调用在实例上访问的任何描述符,或者如果您愿意,可以完全禁止它们。
请记住,Python不会阻止你这样做并不意味着它是一个好主意。