我有这个描述符:
# Generic descriptor
class Attribute(object):
def __init__(self, value):
self.value = value
def __get__(self, instance, value):
return self.value
def __set__(self, instance, value):
self.value = value
我会添加一个属性'modified'来检查描述符的实例是否被修改。 ES。
# Generic descriptor
class Attribute(object):
def __init__(self, value):
self.value = value
self.modified = False
def __get__(self, instance, value):
return self.value
def __set__(self, instance, value):
self.value = value
self.modified = True
我怎么能这样做?
答案 0 :(得分:2)
请注意,在__get__
和__set__
方法中,您实际上想要访问instance
,而不是self
(self
是实际的Attribute
} object)。
这是一种方法:
class Attribute(object):
def __init__(self, attr):
self.attr = attr
def __get__(self, instance, owner):
return getattr(instance, self.attr)
def __set__(self, instance, value):
setattr(instance, self.attr, value)
instance.modified = True
class A(object):
def __init__(self):
self._f = 0
self.modified = False
f = Attribute('_f')
a = A()
a.f
=> 0
a.modified
=> False
a.f = 33
a.modified
=> True
当然,这个代码段可以通过多种方式进行改进,具体取决于您要实现的目标。