Python-向描述符添加属性

标签 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

我怎样才能做到这一点?

最佳答案

请注意,在您的 __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/

相关文章:

python - 在 networkx 中绘制完整的 neo4j 图形的最简单方法

python - 检索与嵌套字典中最小值对应的键

没有任何描述符魔法的 python 属性查找?

python - OpenCv Python SIFT-如何减少关键点的数量?

从字节流中解析可变长度描述符并作用于它们的类型

Python Processpoolexecutor - 杀死队列?

python - 如何实现列表

python - 使用列表中定义的多个条件过滤 Pandas 数据框

c++ - 塞类字符打印

python - 以编程方式为类生成方法