gpt4 book ai didi

Python拦截方法调用

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:47 24 4
gpt4 key购买 nike

让我先说说我想做什么。我想为一个变量创建一个惰性包装器,因为我记录了所有方法调用和运算符调用,并稍后在我指定要调用它的变量时评估它们。

因此,我希望能够拦截所有方法调用和运算符调用以及特殊方法,以便我可以处理它们。但是, __getattr__ 不会拦截运算符调用或 __str__ 等,所以我想知道是否有一种通用的方法来重载所有方法调用,或者我应该动态地创建一个类并复制所有代码(我已经这样做了,但是很丑)。

最佳答案

它可以做到,但是,是的,它变得“丑陋”——我曾经写过一个惰性装饰器,它将任何函数变成一个“惰性计算函数”。

基本上,我发现在 Python 中实际使用对象值的唯一时刻是调用特殊的“dunder”方法之一。例如,当你有一个数字时,它的值仅在你在另一个操作中使用它或将它转换为 IO 的字符串时使用(它也使用“dunder”方法)

因此,我的包装器将参数标注为函数调用,并返回一个特殊对象,它可能具有所有“dunder”方法。就在其中一个方法被调用时,原始函数被调用 - 然后它的返回值被缓存以供进一步使用。

实现在这里: https://bitbucket.org/jsbueno/metapython/src/510a7d125b24/lazy_decorator.py

抱歉,文本和大部分演示文稿都是葡萄牙语。

关于Python拦截方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com