当 属性 被分配给变量时 Setter 被忽略 (Python 3.4)

Setter ignored when property is assigned to variable (Python 3.4)

我正在创建一个 Verdict class,它将评估为 true,直到它被设置为 false,之后它总是评估为 false,即使你将它设置为 true。我能想到的唯一方法是使用 属性 和 setter.

它有效,但为了简单起见而不是:

v = Verdict()
v.verdict = ...
v.verdict = ...
v.verdict = ...

我认为我可以做到:

v = Verdict().verdict
v = ...
v = ...
v = ...

但是第二种情况的v好像直接就是属性,忽略了setter.

class Verdict():
    def __init__(self):
        self.__verdict = True

    @property
    def verdict(self):
        return self.__verdict

    @verdict.setter
    def verdict(self, value):
        if self.__verdict is True:
            self.__verdict = value

    def __bool__(self):
        return self.__verdict

class A():
    v = Verdict().verdict
    y = Verdict()

    def foo(cls):
        cls.y = False
        cls.y = True # Uses setter and stays false
        cls.v = False
        cls.v = True # should use setter and stay false but doesn't 

有没有办法解决这个问题,或者有更好的方法来实现判决?

您无法避免使用 v.verdict = ... 语法。

这是因为属性需要属性访问才能工作。属性为descriptors,描述符协议只对属性访问生效

如果您将 属性(或者更一般地说,描述符)存储在一个变量中,您实际上已经剥夺了它的功能。访问变量只是名称查找,而分配给变量只是将值绑定到名称。无法让 v = ... 之类的作业触发您的 setter.