我有这个示例代码
class aaa:
@staticmethod
def method(self):
pass
@staticmethod
def method2(self):
pass
command = 'method'
现在我想运行命令字符串定义的类aaa的方法。我怎么能这样做?非常感谢你。
答案 0 :(得分:4)
别。很少有理由处理这种方法引入的问题(安全性,清晰度,性能,可以说是可读性......)。只需使用command = aaa.method
。
如果 使用字符串(希望有充分理由),可以使用getattr
,但您应该使用明确的映射来指定所有字符串有效名称(这也使得代码可以防范内部重命名/重构):
methods = {
'method': aaa.method,
'method2': aaa.method2,
}
methods[command]()
“没有这个字符串的方法”的情况可以像这样处理:
method = methods.get(command)
if method is None:
... # handle error/bail out
答案 1 :(得分:3)
首先,删除self
s的staticmethod
参数 - staticmethod
的全部内容是它们没有self
参数。然后,使用
method = getattr(aaa, command)
method()
或只是
getattr(aaa, command)()
调用command
命名的方法。
(我只是想知道你为什么不首先简单地使用command = aaa.method
,但肯定有应用这是不可能的。)
答案 2 :(得分:1)
您可以使用getattr
按名称获取对象的属性。
In [141]: class Foo(object):
.....: def frob(self):
.....: print "Frobbed"
.....:
.....:
In [142]: f = Foo()
In [143]: getattr(f, 'frob')
Out[143]: <bound method Foo.frob of <__main__.Foo object at 0x2374350>>
In [144]: _()
Frobbed