尝试获取该方法时,为什么会出现“ staticmethod”对象不可调用的情况?

时间:2019-07-17 07:19:44

标签: python-3.x oop static-methods python-object

我尽力使用户可以选择用于类的功能。

片段1

类似这样的东西:

class TestFoo():

    @staticmethod
    def foo(x, y):
        return x * y

    methodstr2method = {'foo': foo}

    def __init__(self, method_str):
        self.method = self.methodstr2method[method_str]

    def exec(self, x, y):
        return self.method(x, y)


a = TestFoo('foo')
print(a.exec(3, 7))

但是我知道

Traceback (most recent call last):
  File "/home/math/Desktop/foobar.py", line 17, in <module>
    print(a.exec(3, 7))
  File "/home/math/Desktop/foobar.py", line 13, in exec
    return self.method(x, y)
TypeError: 'staticmethod' object is not callable

当我移除@staticmethod时,它可以工作。为什么会这样?我以为没有装饰器,第一个参数将始终是selfcls为什么代码段1无效?

摘要2

但是,此方法有效:

class TestFoo():

    @staticmethod
    def foo(x, y):
        return x * y


    def __init__(self, method_str):
        self.methodstr2method = {'foo': self.foo}
        self.method = self.methodstr2method[method_str]

    def exec(self, x, y):
        return self.method(x, y)


a = TestFoo('foo')
print(a.exec(3, 7))

0 个答案:

没有答案