не рекомендуется применять декоратор - PullRequest
7 голосов
/ 04 марта 2010

Был прекрасный способ организовать свойство класса в рамках одной функции, используя декоратор применения.

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())

Но теперь применение устарело.

Есть ли возможность достичь такой простоты и удобочитаемости для свойства, с новым, пришедшим вместо «расширенного синтаксиса вызова»?


Мой подход такой же, как у Анурага, но сейчас я не считаю, что лучше, пожалуйста, посмотрите:

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 ]

12 голосов
/ 04 марта 2010

Есть ли возможность добиться такой простоты и читабельности для свойства

Новый способ 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
2 голосов
/ 04 марта 2010

:) это умный пользователь применения, хотя я не уверен, есть ли подводные камни?

в любом случае вы можете сделать это

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()
0 голосов
/ 04 марта 2010

Вы всегда можете написать свой собственный:

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

Однако я не совсем уверен, что вижу преимущество использования apply в качестве декоратора таким образом. Какой вариант использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...