python @properties的评估方式和时间

时间:2018-09-13 11:36:23

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

我试图理解何时在test_obj中定义的变量 b 获得其值“ b”。

从下面的屏幕快照中可以看到,第13行上的语句尚待评估/执行,但是test_obj的 b 值已经初始化。通过在几乎每一行上都放置一个断点来调试它并不能帮助我理解这是怎么发生的。

enter image description here 有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

IDE更有可能向您显示test_obj.b的值。为此,它test_obj.b 获取值。由于b是属性还是@property并没有多大区别,因此调试器实际上只是为您执行test_obj.b,这为它提供了值'b'

函数def b的工作原理与您期望的其他普通函数完全相同;只是调试器/ IDE为您隐式调用了它。