我尝试让用户可以选择使用哪个函数来上课。
片段 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
,它可以工作。为什么会这样?我想如果没有装饰器,第一个参数将永远是self
or 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))