python @properties 如何以及何时评估

How and when are python @properties evaluated

这是一段代码。

class TestClass:
    def __init__(self):
        self.a = "a"
        print("calling init")

    @property
    def b(self):
        b = "b"
        print("in property")
        return b

test_obj = TestClass()
print("a = {} b = {}".format(test_obj.a,test_obj.b))

我正在尝试理解 何时 定义在 test_obj 中的变量 b 获得其值 "b".

从下面的截图中可以看出,第 13 行的语句尚未成为 evaluated/executed,但 b 的值已经是 test_obj已经初始化。通过在每一行上放置一个断点来调试它并没有帮助我理解这是如何发生的。

有人可以向我解释一下吗?

更有可能的是,IDE 试图向您展示 test_obj.b 的值是多少。为此,它 test_obj.b 中获取值。由于 b 是一个属性还是 @property 并没有多大区别,调试器基本上只是为你做 test_obj.b,它的值是 'b' .

函数 def b 的工作方式与您对任何其他普通函数的预期完全一样;只是 debugger/IDE 隐式地为你调用它。