我有这个描述符:
# 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
我怎样才能做到这一点?
最佳答案
请注意,在您的 __get__
和 __set__
方法中,您实际上想要访问 instance
,而不是 self
( self
是实际的 Attribute
对象)。
这是一种实现方法:
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
当然,可以通过多种方式改进此代码片段,具体取决于您想要实现的目标。
关于Python-向描述符添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19024869/