题
我在Python程序中使用Argparse,我想打电话给 方法 当我这样运行这样的软件时:
$ python __init__.py foo
如果我想调用函数而不是一种方法,这很容易:
def foo(args):
pass
def main():
foo_parser.set_defaults(func=foo)
if __name__ == "__main__":
main()
如何用“ func = myClass.my_method”替换“ func = foo”?
解决方案
您只需指该方法而不是函数即可。是的。很容易。代替
func = foo
你做
func = theobject.foo
完毕!
其他提示
您自己给出了正确的答案。只是说:
func = Your_Class.your_method
代替:
func = foo
您是否正在寻找这样的东西:
import argparse
class Myclass(object):
def foo(self):
print 'foo'
def bar(self):
print 'bar'
class Main(Myclass):
def __init__(self):
foo_parser = argparse.ArgumentParser()
foo_parser.add_argument('method')
self.args = foo_parser.parse_args()
def __call__(self, *args, **kws):
method = self.args.method
return getattr(self, method)(*args, **kws)
if __name__ == "__main__":
main = Main()
main()
用法的示例:
$ python test.py foo
'foo'
$ python test.py bar
'bar'
如果通过“方法”您的意思是“实例方法”:您无法使用实例调用实例方法,因此您需要先一个实例。然后,您可以参考 obj.method
并得到一个 BoundMethod
记住实例(obj
) - 例如:
class Cls:
def __init__(self, x):
self.x = x
def foo(self, new_x):
self.x = new_x
obj = Cls(1)
foo = obj.foo
foo(2) # same as obj.foo(), but we don't need to keep obj for this!
print(obj.x) #=>2
如果是静态的(如果是的话,为什么?在99%的免费功能中也更易于使用和工作)或类方法,请参考 Cls.method
.
不隶属于 StackOverflow