如何以及何时评估 python @properties

Dhi*_*mar 5 python properties python-internals

这是一段代码。

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))
Run Code Online (Sandbox Code Playgroud)

我想了解变量b内test_obj定义获取其“b”的值。

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

在此处输入图片说明 有人可以向我解释一下吗?

dec*_*eze 6

更有可能的是,IDE 正试图向您展示 的价值test_obj.b。为此,它test_obj.b. 由于它b是属性还是 a并没有太大区别@property,调试器基本上只是test_obj.b为您做,这给了它 value 'b'

该函数的def b工作方式与您对任何其他普通函数的期望完全相同;只是调试器/IDE 会为您隐式调用它。

  • 是的,如果没有调试器,那个时候那个值还不存在。 (2认同)