不确定我将如何完成对print('something')函数的覆盖,从而在我所在的类中做其他事情。
例如,我有以下代码:
import app
from app.helper import ws_send
class TemplateSubJob:
def __init__(self, sessiondata, sid, payload):
self.session = sessiondata
self.sid = sid
self.payload = payload
def startme(self):
ws_send(self.sid, self.payload, 'Send some output to the user...')
ws_send(self.sid, self.payload, 'Send something else to the user...')
print('test')
return b'xlsx_bytes_output'
我想重写函数print('something')以获取传递的内容并对其进行处理。
在我的情况下,我想创建一个打印功能,该功能可以执行ws_send()的操作,但只接受一个字符串即可。
类似以下内容:
def print(string):
ws_send(self.sid, self.payload, string)
print('now i am being sent through ws_send instead of stdout')
我该怎么做?
更新:
这样做的原因是,向我添加代码的任何人都无需修改其代码或脚本即可使用我的功能。我可以劫持他们已经在使用的打印功能。
答案 0 :(得分:0)
您可以使用以下语法重载打印功能:
from __future__ import print_function
try:
# python2
import __builtin__
except ImportError:
# python3
import builtins as __builtin__
def print(*args, **kwargs):
__builtin__.print('New print function')
return __builtin__.print(*args, **kwargs)
E:如评论中指出的那样,修复了错误的导入
答案 1 :(得分:0)
要将打印重定向到变量(字符串),请使用以下方法:
from io import StringIO # Python2 use: from cStringIO import StringIO
import sys
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
# blah blah lots of code ...
sys.stdout = old_stdout
# examine mystdout.getvalue()
来源:https://stackoverflow.com/a/1218951/4718434
要将其重定向到文件,请使用以下命令:
答案 2 :(得分:0)
所以我不打算在给定的情况下使用打印语句的原因,但是对于 Python 3,在您的类描述中
class TemplateSubJob:
def __init(self, ):
# and other methods
def __str__(self, ):
return 'String description here'
当有人试图打印给定的对象时,它将返回给定的字符串。例如,当我实例化时,我可以在实例化之后直接调用print函数,它会返回上面str函数返回的任何字符串
myobject = TemplateSubJob()
print(myobject)