【问题标题】:Python decorator classes that take arguments and change types接受参数和更改类型的 Python 装饰器类
【发布时间】:2011-06-13 08:40:39
【问题描述】:

我只是在 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 而不是可调用的。

有什么想法吗?

编辑:请不要再回答问题已经解决了,我明白我做错了什么。它是一个错字,我定义了一个函数而不是一个类

【问题讨论】:

    标签: python int decorator


    【解决方案1】:

    您的returns() 函数不返回任何内容。你的意思是让它成为一门课吗?

    【讨论】:

    • 我要去打我的头。谢谢你发现
    【解决方案2】:

    也许你想替换

    def returns(object):
    

    通过

    class returns(object):
    

    【讨论】:

    • 发现了,我一般不会犯这样的根本错误
    猜你喜欢
    • 2020-04-02
    • 2020-06-20
    • 2022-08-15
    • 2011-11-21
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2014-03-24
    • 2017-05-26
    相关资源
    最近更新 更多