申请装饰者的弃用

时间:2010-03-04 07:40:51

标签: python

通过使用apply decorator,有一种漂亮的方法可以在一个函数的框架中组织类属性。

class Example(object):
    @apply
    def myattr():
        doc = """This is the doc string."""

        def fget(self):
            return self._half * 2

        def fset(self, value):
            self._half = value / 2

        def fdel(self):
            del self._half

        return property(**locals())

但现在申请已被弃用。

是否有可能实现属性的这种简单性和可读性,使用new,而不是“扩展调用语法”?


我的方法与Anurag的方法相同,但是,我现在不会更好,请看:

def prop(f):

    return property(**f())

class A(object):

    @prop
    def myattr():

        def fget(self):
            return self._myattr

        def fset(self, value):
            self._myattr = value 

        return locals()

3 个答案:

答案 0 :(得分:12)

  

是否有可能实现财产的这种简单性和可读性

新的Python 2.6方式是:

@property
def myattr(self):
    """This is the doc string."""
    return self._half * 2

@myattr.setter
def myattr(self, value):
    self._half = value / 2

@myattr.deleter
def myattr(self):
    del self._half

答案 1 :(得分:2)

:)这是一个聪明的申请用户,虽然我不确定是否有任何陷阱?

无论如何你可以这样做

class Example(object):
    def myattr():
        doc = """This is the doc string."""

        def fget(self):
            return self._half * 2

        def fset(self, value):
            self._half = value / 2

        def fdel(self):
            del self._half

        return property(**locals())
    myattr = myattr()

答案 2 :(得分:0)

你总是可以写自己的:

def apply(f, a):
    return f(*a)

但是,我不太确定我看到以这种方式使用apply作为装饰器的好处。用例是什么?