重写当前类python3中的print方法
我不确定如何重写print('something')函数,请在我所在的类中执行其他操作 例如,我有以下代码:重写当前类python3中的print方法,python,python-3.x,Python,Python 3.x,我不确定如何重写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
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'),以获取传递的内容并对其进行处理
在我的例子中,我想创建一个print函数,它执行ws_send()正在执行的操作,除了只获取字符串
如下所示:
def print(string):
ws_send(self.sid, self.payload, string)
print('now i am being sent through ws_send instead of stdout')
我怎样才能做到这一点
更新:
其原因是,任何向我的函数添加代码的人都不需要修改他们的代码或脚本来使用我的函数。我可以劫持他们已经在使用的打印函数。您可以使用以下语法重载打印函数:
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:修复了错误导入,如注释中指出的,将打印重定向到变量(字符串),请使用以下命令:
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()
资料来源:
要将其重定向到文件,请使用以下命令:
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()
因此,我不打算讨论在给定情况下使用print语句的原因,而是在类描述中讨论python3
类模板主题:
定义初始值(self,):
#以及其他方法
定义(self):
返回“此处的字符串描述”
当有人试图打印给定对象时,它将返回给定字符串。例如,当我实例化时,我可以在实例化之后直接调用print函数,它将返回上面的str函数返回的任何字符串
myobject=templateSubject()
打印(myobject)
为什么不将print
添加为您正在使用的类的方法,并调用ws\u send.print()
?出于好奇:那么为什么要使用print()
?为什么不定义另一个使用ws_send()
的函数呢?如果将您在startme
方法中定义的print()
函数放在一起,它将完全按照定义工作。但是,正如Tim所指出的,最好将其作为一种方法。如果要输出到文件,请在print函数中使用file=…
关键字参数。我正在编写代码,有人可以复制和粘贴他们的脚本,我想覆盖print,这样他们就不必更改代码,我的代码只需知道覆盖print,所以他们不必把所有的打印语句都改成ws_send…什么<代码>从内置导入uu内置uu?不,它只是Python2上的import内置程序
,或者import\uuuuuuuuuuuuuuuuuuuuuuu
。builtins
模块本身(或者Python2上的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
模块)是内置名称空间,而不是内置名称空间。在python 2中,您可能需要“futures”导入print_函数。您好。。。检查//观察。。。你的答案阐述得很差。插入带有代码和参考的有效响应非常有用。总结出切实有效的解决方案。这个平台不仅仅是任何论坛。我们是世界上最大的帮助和支持其他程序员和开发人员的中心。回顾社区的条款,学习如何发布;是的,添加了另一个显示函数放置位置和如何调用的剪贴画,希望这样可以清除它?