覆盖当前类python3中的打印方法

use*_*716 2 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 = 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'
Run Code Online (Sandbox Code Playgroud)

我想重写函数 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')
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

更新:

这样做的原因是,任何向我的函数添加代码的人都不需要修改他们的代码或脚本来使用我的函数。我可以劫持他们已经在使用的打印功能。

Tim*_*Tim 6

您可以使用以下语法重载打印函数:

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)
Run Code Online (Sandbox Code Playgroud)

E:修复了错误的导入,如评论中所指出的