我目前正在從庫中修補一個類的屬性,以使其更通用。爲什麼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