1

我有这个描述符:

# 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'来检查描述符的实例是否被修改。埃斯。

# 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

我怎么能做到这一点?

4

1 回答 1

2

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

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

于 2013-09-26T13:17:38.863 回答