0

我尝试让用户可以选择使用哪个函数来上课。

片段 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,它可以工作。为什么会这样?我想如果没有装饰器,第一个参数将永远是selfor cls为什么片段 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))
4

0 回答 0