更好的python属性d

2024-04-27 22:01:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我继承了一些python代码,其中包含一个相当神秘的decorator。这个装饰器在整个项目的类中设置属性。问题是,我已经将调试问题追溯到这个装饰器。似乎是“fubar”所有我试过的调试器,并试图用psyco breaks来加速代码。(看来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,同一个decorator是否可以实现。如果不是的话,我会重做的。


Tags: 代码selfreturndefsysfunction装饰decorator