对于这个问题:
为什么描述符不能是实例属性?
有人回答说:
描述符对象需要存在于类中,而不是实例中
因为这就是__getattribute__
实现的方式。
一个简单的例子。考虑一个描述符:
class Prop(object):
def __get__(self, obj, objtype=None):
if obj is None:
return self
return obj._value * obj._multiplier
def __set__(self, obj, value):
if obj is None:
return self
obj._value = value
class Obj(object):
val = Prop()
def __init__(self):
self._value = 1
self._multiplier = 0
考虑每个 obj 有多个 Prop 的情况:我需要使用唯一的名称来标识值和乘数(就像这里。拥有每个实例描述符对象将允许将_multiplier
(和_value
) 存储在描述符本身中,从而简化一些事情。
要实现每个实例描述符属性,您需要:
我知道之前也有人提出过类似的问题,但我还没有找到真正的解释:
- 为什么 Python 是这样设计的?
- 存储描述符需要但每个实例的信息的建议方法是什么?