1

私はPythonプログラムでargparseを使用しており、次のようにソフトウェアを実行するときにメソッドを呼び出したいと思います。

$ python __init__.py foo

メソッドの代わりに関数を呼び出したい場合は簡単です:

def foo(args):
    pass

def main():
    foo_parser.set_defaults(func=foo)

if __name__ == "__main__":
    main()

「func=foo」を「func=MyClass.my_method」に置き換えるにはどうすればよいですか?

4

4 に答える 4

5

関数の代わりにメソッドを参照するだけです。うん。それはとても簡単です。それ以外の

 func = foo

あなたがやる

 func = theobject.foo

終わり!

于 2011-01-07T14:25:33.537 に答える
1

あなたは自分で正しい答えを出しました。ただ置く:

func = Your_Class.your_method

それ以外の:

func = foo
于 2011-01-07T14:32:18.937 に答える
1

あなたはこのようなものを探しています:

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'
于 2011-01-07T14:35:57.407 に答える
0

「メソッド」が「インスタンス メソッド」を意味する場合: インスタンスでインスタンス メソッドを呼び出すことはできないため、最初にインスタンスが必要です。次に、インスタンス ( ) を記憶する を参照しobj.methodて取得するだけです。例:BoundMethodobj

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

于 2011-01-07T14:16:12.030 に答える