我已經繼承了一些包含相當神祕的修飾器的python代碼。這個裝飾器在整個項目中設置類的屬性。問題是,我已經將我的調試問題追溯到這個裝飾器。看來它是「fubar」我試過的所有調試器,並試圖加速與psyco代碼打破everthing。 (似乎psyco和這個裝飾器不玩很好)。我認爲最好改變它。一個更好的python屬性修飾器
def Property(function):
"""Allow readable properties"""
keys = 'fget', 'fset', 'fdel'
func_locals = {'doc':function.__doc__}
def probeFunc(frame, event, arg):
if event == 'return':
locals = frame.f_locals
func_locals.update(dict((k,locals.get(k)) for k in keys))
sys.settrace(None)
return probeFunc
sys.settrace(probeFunc)
function()
return property(**func_locals)
使用像這樣:
class A(object):
@Property
def prop():
def fget(self):
return self.__prop
def fset(self, value):
self.__prop = value
... ect
的錯誤,我得到說的問題都是因爲sys.settrace。 (也許這是濫用settrace?)
我的問題:是否可以實現相同的裝飾沒有 sys.settrace。如果不是,我會進行一些重寫。
我所有的處事習慣蟒蛇的方式,但最後的例子似乎比我繼承了「巫毒」裝飾的可讀性。也許我只需要習慣它。 (慣用的方式,那就是) – jtm 2010-04-09 20:44:12