【发布时间】:2012-09-17 23:24:25
【问题描述】:
问题:
为什么描述符不能是实例属性?
描述符对象需要存在于类中,而不是实例中
因为这是实现__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 的情况:我需要使用唯一名称来标识值和乘数(例如 here。拥有每个实例描述符对象将允许存储 _multiplier(以及_value) 在描述符本身中,简化了一些事情。
要实现每个实例的描述符属性,您需要:
我知道之前有人提出过类似的问题,但我没有找到真正的解释:
- 为什么 Python 是这样设计的?
- 存储描述符需要但每个实例的信息的建议方法是什么?
【问题讨论】:
标签: python descriptor