Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写当前类python3中的print方法_Python_Python 3.x - Fatal编程技术网

重写当前类python3中的print方法

重写当前类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

我不确定如何重写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'),以获取传递的内容并对其进行处理

在我的例子中,我想创建一个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_函数。您好。。。检查//观察。。。你的答案阐述得很差。插入带有代码和参考的有效响应非常有用。总结出切实有效的解决方案。这个平台不仅仅是任何论坛。我们是世界上最大的帮助和支持其他程序员和开发人员的中心。回顾社区的条款,学习如何发布;是的,添加了另一个显示函数放置位置和如何调用的剪贴画,希望这样可以清除它?