Классы Python Decorator, которые принимают аргументы и меняют типы - PullRequest
0 голосов
/ 13 июня 2011

Я просто играю с декораторами в python и наслаждаюсь опытом, для меня класс декоратора кажется мне чище, чем функции декоратора, поэтому я играл с этим дизайном

def returns(object):
    """Enforces return to a specific type"""
    def __init__(self, returns):
        self.returns = returns

    def __call__(self, func):
        def wrapped(*args):
            out = func(*args)
            return self.returns(out)
        return wrapped

@returns(int) 
def test():
    return '4'

Проблема с приведенным выше кодомявляется то, что он возвращает

------------------------------------------------------------
Traceback (most recent call last):
  File "", line 1, in <module>
  File "", line 122, in runfile
    execfile(filename, glbs)
  File "", line 33, in <module>
    @returns(int)
TypeError: 'NoneType' object is not callable

Мне интересно, почему я могу вызвать int () как функцию, и у нее есть вызываемый метод, но он говорит это здесь как NoneType и не вызывается.

Есть идеи?

РЕДАКТИРОВАТЬ: Пожалуйста, больше не отвечает, проблема была решена, и я понимаю, что я делал неправильно.Это опечатка, и я определяю функцию, а не класс

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Может быть, вы хотите заменить

def returns(object):

от

class returns(object):
2 голосов
/ 13 июня 2011

Ваша returns() функция ничего не возвращает. Вы хотели сделать это классом?

...