Python中@property装饰器及requiresQuery属性的执行时机咨询
关于@property装饰器执行时机的问题解答
让我一步步帮你理清这些疑问:
1. 属性装饰器函数是否仅在被调用时执行?
没错!用@property装饰的方法,本质是把它转换成了类的属性,只有当你主动访问这个属性(比如obj.requiresQuery)的时候,装饰器包裹的函数体才会被执行。它不会在类定义完成后自动运行,也不会因为类的其他操作莫名触发。
2. SomeTable类中requiresQuery @property的执行时机
这个requiresQuery属性只会在你主动访问它的时候才执行,绝对不会因为对SomeTable执行任意查询就触发。
结合你给出的代码来看:它内部的filterValue = getValueFromJson(self.someJson)、session.query(OtherTable)...这些逻辑,只有当你明确写出some_table_instance.requiresQuery的时候,才会依次运行并返回结果。如果只是查询SomeTable的其他字段,完全没碰这个属性,那它的代码根本不会跑。
3. 执行session.query(SomeTable).one().someJson时,requiresQuery会执行吗?
不会!因为你这里只访问了someJson这个Column字段,完全没有触发requiresQuery属性的访问动作。只有当你在代码中主动获取这个属性的值(比如result = session.query(SomeTable).one().requiresQuery)时,它的函数体才会被执行。
总结一下:@property装饰的方法,执行时机完全由是否主动访问该属性决定,和类的其他操作(比如查询类的其他字段)没有任何关联。
内容的提问来源于stack exchange,提问作者nanomosfet
相关产品推荐
相关产品推荐

