非常简单的问题 - 我已经搜索但没有找到这个问题的答案。
这样做可能有点傻,但我很好奇是否可以挂钩到 python 3.X 的函数并在调用结束时print(*arg, **kwarg)
覆盖它/添加。time.sleep(var)
当然,我可以定义另一种方法并用 a 包装它,time.sleep(var)
但我只是好奇如何覆盖预构建的函数。
非常简单的问题 - 我已经搜索但没有找到这个问题的答案。
这样做可能有点傻,但我很好奇是否可以挂钩到 python 3.X 的函数并在调用结束时print(*arg, **kwarg)
覆盖它/添加。time.sleep(var)
当然,我可以定义另一种方法并用 a 包装它,time.sleep(var)
但我只是好奇如何覆盖预构建的函数。
如果您想全局修补任何功能,例如出于测试/调试目的,最安全的方法是使用unittest.mock.patch()
:
def x():
'''the code under test'''
print('Hello, world!')
...
from unittest.mock import patch
orig_print = print
with patch('builtins.print') as m:
def my_print(*args, **kwargs):
orig_print('PATCHED:', *args, **kwargs)
m.side_effect = my_print
x() # prints 'PATCHED: Hello, world!'
# prints 'Hello, world!', because the patch context is exited
# and the original function is restored:
x()
你也可以试试这一个班轮
out = print
print = lambda *args, **kwargs: [time.sleep(1), out(*args, **kwargs)]
您可以,您可以执行以下操作:
def new_print(*args, **kwargs):
# Your new print function here
pass
print = new_print
建议您保存旧的打印功能,如果您想在打印功能中使用它,您将需要它。你可以这样做
old_print = print
def new_print(*args, **kwargs):
old_print(*args, **kwargs)
print = new_print
如果您现在想添加 sleep ,只需将其放入新功能即可
import time
old_print = print
def new_print(*args, **kwargs):
old_print(*args, **kwargs)
time.sleep(5)
print = new_print
只是为了表明它会起作用,这里是一个例子。如您所知,绝对不建议这样做。
import sys
def new_print(msg):
sys.stdout.write("I always add this text\n")
sys.stdout.write(msg)
print = new_print
print("Test")
我总是添加这个文本
测试