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

kev*_*rpe 1 python stdout reference

我传统上是Perl和C++程序员,所以如果我误解了Python的一些小问题,请提前道歉!

我想创建一个引用的引用.咦?好.Python中的所有对象实际上都是对真实对象的引用.那么,我如何创建对此引用的引用?

我为什么需要/想要这个?我重写sys.stdout和sys.stderr来创建一个日志库.我想要一个(二级)引用sys.stdout.

如果我可以创建对引用的引用,那么我可以创建一个通用的记录器类,其中init函数接收对将被覆盖的文件句柄引用的引用,例如sys.stdout或sys.stderr.目前,我必须对这两个值进行硬编码.

干杯,凯文

msw*_*msw 6

比说的更简单:

ostream = sys.stdout
print >> ostream, 'hi mom!'
ostream = sys.stderr
print >> ostream, 'hi mom!'
ostream = open('mylog.txt', 'a')
...
Run Code Online (Sandbox Code Playgroud)

当你有更多的Python时,看看标准的日志记录模块.

这个答案是基于从问题的层面推测真正需要的东西.Python中不需要引用引用的概念,如果需要,可以通过列表或dict进行多路复用:

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

等等.