【发布时间】:2014-06-30 19:16:01
【问题描述】:
鉴于 Python 的动态性,如果这不可能,我会感到震惊:
我想更改sys.stdout.write的实现。
我从另一个问题的答案中得到了这个想法:https://stackoverflow.com/a/24492990/901641
我试着简单地写这个:
original_stdoutWrite = sys.stdout.write
def new_stdoutWrite(*a, **kw):
original_stdoutWrite("The new one was called! ")
original_stdoutWrite(*a, **kw)
sys.stdout.write = new_stdoutWrite
但它告诉我AttributeError: 'file' object attribute 'write' is read-only。
这是一个很好的尝试,可以防止我做一些可能(可能)愚蠢的事情,但我真的很想继续做下去。我怀疑解释器有某种我可以修改的查找表,但我在谷歌上找不到类似的东西。 __setattr__ 也不起作用 - 它返回了关于属性为只读的完全相同的错误。
我正在专门寻找 Python 2.7 解决方案,如果这很重要的话,尽管没有理由拒绝提供适用于其他版本的答案,因为我怀疑其他人将来会在这里看到关于其他版本的类似问题。
【问题讨论】:
-
您必须将所有
sys.stdout替换为行为符合您要求的新对象。 -
@Wooble - 这是一个有趣的想法。想在更完整的答案中展示吗?
-
Wooble,完美地回答了我的问题。谢谢!我已经回滚了这个问题的标题更改。提出的更具体的标题让我觉得太具体了——我想要一个关于如何更改只读属性(我已提供)的一般答案,而不是关于如何仅更改我给出的属性的具体答案问题中的一个例子。
标签: python python-2.7 stdout readonly-attribute