修改包装python打印以返回类型

时间:2013-03-09 16:10:47

标签: python wrapper

我从这段代码得到的是,在python中打印是write stdout方法的包装函数所以如果我给它一个返回类型它也必须返回它,对吧?那为什么我不能那样做呢?

import sys
class CustomPrint():
    def __init__(self):
        self.old_stdout=sys.stdout

    def write(self, text):
        text = text.rstrip()
        if len(text) == 0: return
        self.old_stdout.write('custom Print--->' + text + '\n')
        return text
sys.stdout=CustomPrint()
print "ab" //works
a=print "ab" //error! but why?

1 个答案:

答案 0 :(得分:3)

在python2.x中,print语句。因此,a = print "ab"是非法语法。试试print "ab"

在python3中,print函数 - 所以你要写:a = print("ab")。请注意,从python2.6开始,您可以通过print访问python3的from __future__ import print_function函数。

最终,你想要的是:

#Need this to use `print` as a function name.
from __future__ import print_function
import sys   

class CustomPrint(object):
    def __init__(self):
        self._stdout = sys.stdout
    def write(self,text):
        text = text.rstrip()
        if text:
            self._stdout.write('custom Print--->{0}\n'.format(text))
            return text
    __call__ = write

print = CustomPrint()

a = print("ab")