Skip to main content
 首页 » 编程设计

Python:如何创建对引用的引用

2025年05月04日11duanxz

我传统上是一名 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!' 

等等。