类型错误:在类中使用装饰器时,“staticmethod”对象不可调用

Tian

我在下面有一些代码

class Example:
    def __init__(self,height,weight)
        self.height = height
        self.weight = weight

    @staticmethod
    def some_op(func)
        def inner(*args,**kwargs)
        s = func(*args,**kwargs)
        print("Implementing function...")


    @some_op
    def num_op(self,values):
        for value in values:
            v = value * 10
            q = v - 100
            c = q ** -1
        return c

example = Example()

values = [11,23123,1209,234]

example.num_op(values)

但它输出:

TypeError: 'staticmethod' object is not callable

我真的不知道类中的装饰器,所以我应该如何更改代码以使其返回:

Implementing function...
0.0004464285714285714

非常感谢!

切普纳

静态方法不可调用;它是一个对象,其__get__方法返回一个可调用对象。但是,您不是some_op作为属性访问(不完整的定义除外),而是作为常规函数访问,因此它的__get__方法永远不会被使用。您有两个选择:

  1. 定义some_op为类外的常规函数​​。
  2. 不要定义some_op为静态方法。由于您只是在类定义本身内部调用它,因此让它成为常规函数,并且不要将其用作实例方法。(您可以将其定义为_some_op强调不应在课堂外使用。)

有关__get__它是什么以及它如何工作的更多信息,请参阅Descriptor HowTo Guide特别是关于静态方法的部分

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

类型错误“类”对象不可调用

Python:在装饰器中使用可调用对象而不是局部函数作为包装器

使用属性设置器时出现错误“'str'对象不可调用”

TypeError:“ NoneType”对象不可调用:当我尝试使用openpyxl在Python中使用Excel文件时显示此错误

类型错误:“布尔”对象不可调用

如何使用类装饰器装饰“可调用”类?

类型错误:Int对象不可调用

类型错误:读取文件时“str”对象不可调用

类型错误:“列表”对象不可调用,从继承的列表类调用扩展时出错

计算器中的错误:类型错误:“浮动”对象不可调用

“dict”对象不可调用错误 - 当我没有在 networkx 中使用任何“dict”时

错误类型错误:“str”对象不可调用

类型错误:“生成器”对象不可调用。尝试迭代字符串数据时

类型错误:“模块”对象不可调用 - pygsp 模块不可调用

类型错误:“StringVar”对象不可调用

类型错误:“条目”对象不可调用

类型错误:创建自定义线程池时“bool”对象不可调用

类型错误:“ShiftSerializer”对象不可调用

硒错误“类型错误:‘str’对象不可调用”

类型错误:“球”对象不可调用?

类型错误:“str”对象不可调用(打印整数和单词时)

类型错误:“IndicesClient”对象不可调用

类型错误:“管道”对象在自定义分类器中不可调用

如何修复多处理器类型错误:“列表”对象不可调用

类型错误:“WebElement”对象不可调用

类型错误:类型不可调用 - 编译时

类型错误:int 对象不可调用

类型错误:“Vocab”对象不可调用

TypeError: 'NoneType' 对象不可调用(python 装饰器)