我传统上是一名 Perl 和 C++ 程序员,所以如果我对 Python 的一些琐碎的事情有误解,请提前道歉!
我想创建对引用的引用。 嗯?好的。 Python 中的所有对象实际上都是对真实对象的引用。 那么,如何创建对此引用的引用?
为什么我需要/想要这个?我正在覆盖 sys.stdout 和 sys.stderr 来创建一个日志库。我想要一个(二级)对 sys.stdout 的引用。
如果我可以创建对引用的引用,那么我可以创建一个通用记录器类,其中 init 函数接收对将被覆盖的文件句柄引用的引用,例如 sys.stdout或 sys.stderr。目前,我必须对这两个值进行硬编码。
干杯, 凯文
请您参考如下方法:
做起来比说起来容易:
ostream = sys.stdout
print >> ostream, 'hi mom!'
ostream = sys.stderr
print >> ostream, 'hi mom!'
ostream = open('mylog.txt', 'a')
...
再看看标准logging module当您掌握更多 Python 时。
这个答案是基于从问题的层面上真正需要什么的假设。 Python 中不需要引用引用的概念,如果需要,您可以通过列表或字典进行多路复用:
outputs = [sys.stderr, my_open_file_object_which_is_really_a_reference]
print >> outputs[0], 'hi dad!'
outputs = {'terminal': sys.stderr, 'logfile': file_object}
print >> outputs['logfile'], 'goodbye world!'
等等。
