我目前正在从库中修补一个类的属性,以使其更通用。为什么property.fget是只读属性?
我用下面的代码的正常工作这样做:
_orig_is_xhr = BaseRequest.is_xhr.fget
_orig_is_xhr_doc = BaseRequest.is_xhr.__doc__
BaseRequest.is_xhr = property(lambda self: _orig_is_xhr(self) or
'_iframe-xhr' in request.form, doc=_orig_is_xhr_doc)
然而,这将是更漂亮,如果我可以简单地覆盖getter函数使文档字符串被保留:
_orig_is_xhr = BaseRequest.is_xhr.fget
BaseRequest.is_xhr.fget = lambda self: (_orig_is_xhr(self) or
'_iframe-xhr' in request.form)
这不起作用,因为property.fget
是只读属性(TypeError: readonly attribute
试图分配给它时)。 我很好奇,如果有一个特殊的原因,或者它的Python开发人员只是认为它没有任何意义的修改后创建一个属性,而不用一个新的替换它。
嘿,不错 - 我不会破解蟒蛇来源虽然:p – ThiefMaster 2011-04-23 18:56:12
当然:-)我只是指出,只读的背后没有什么更奇特的东西。 – samplebias 2011-04-23 18:58:44
可变属性会为无意的副作用创造一些可怕的机会。 'Thread.ident.fget = Thread.daemon.fget'任何人? – ncoghlan 2011-04-24 17:10:00