Python - 将属性添加到描述符

时间:2013-09-26 09:47:59

标签: python descriptor

我有这个描述符:

# 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

我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

请注意,在__get____set__方法中,您实际上想要访问instance,而不是selfself是实际的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

当然,这个代码段可以通过多种方式进行改进,具体取决于您要实现的目标。