【发布时间】:2011-02-06 07:49:35
【问题描述】:
我继承了一些 python 代码,其中包含一个相当神秘的装饰器。这个装饰器在整个项目的类中设置属性。问题是我已经将调试问题追溯到这个装饰器。似乎它“fubars”了我尝试过的所有调试器,并试图用 psyco 加速代码破坏一切。 (似乎 psyco 和这个装饰器玩得不好)。我认为最好改变它。
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 是否可以实现相同的装饰器。如果不是,我将进行一些重大的重写。
【问题讨论】:
标签: python debugging properties decorator