4

私は次のことをしたい:

私は、異なる入力を必要とするいくつかの機能を提供する必要があるクラスを持っています。そして、これらの関数を他のスクリプト内から、またはコマンドラインからのみ使用したいと考えています。

たとえば、クラス「テスト」があります。「クイックテスト」機能があります(基本的には何かを印刷するだけです)。(コマンドラインから)できるようにしたい

$ python test.py quicktest "foo" "bar"

一方、quicktest は関数の名前で、"foo" と "bar" は変数です。

また、(別のスクリプト内から)したい

from test import test

# this
t = test()
t.quicktest(["foo1", "bar1"])

# or this
test().quicktest(["foo2", "bar2"])

私はそれを機能させることができません。最初のリクエスト用のクラスと 2 番目のリクエスト用のクラスを作成できましたが、両方のクラスを作成することはできませんでした。問題は、(self) を介して関数を呼び出さなければならないこともあれば、そうでないこともあり、また、指定されたパラメーターをいつでも提供する必要があることです。これもちょっと複雑です。

それで、誰かがそれについての考えを持っていますか?


これは私がすでに持っているものです:

コマンドラインからのみ動作します:

class test:
    def quicktest(params):
        pprint(params)

    if (__name__ == '__main__'):
        if (sys.argv[1] == "quicktest"):
            quicktest(sys.argv)
        else:
            print "Wrong call."

他のスクリプト内からのみ機能します。

class test:
    _params = sys.argv 

    def quicktest(self, params):
        pprint(params)
        pprint(self._params)

    if (__name__ == '__main__'):
        if (sys.argv[1] == "quicktest"):
            quicktest()
        else:
            print "Wrong call"
4

3 に答える 3

4

次のことを試してください(インデントが異なることに注意してください。その部分はもはやクラスのif __name__一部ではありませtestん):

class test:
    def quicktest(params):
         pprint(params)

if __name__ == '__main__':
    if sys.argv[1] == "quicktest":
        testObj = test()
        testObj.quicktest(sys.argv)
    else:
        print "Wrong call."

他のスクリプトから:

from test import test
testObj = test()
testObj.quicktest(...)
于 2013-06-18T08:49:04.980 に答える
1

ブロックは最if __name__ == '__main__':上位にある必要があります。

class Test(object): # Python class names are capitalized and should inherit from object
    def __init__(self, *args):
        # parse args here so you can import and call with options too
        self.args = args

    def quicktest(self):
        return 'ret_value'

if __name__ == '__main__':
    test = Test(sys.argv[1:])
于 2013-06-18T08:53:54.697 に答える
0

argparseを使用してコマンド ラインを解析し、コマンド ラインから値を解析できます。

メソッドを持ち、メソッドを引数に関連付けるクラス。

于 2013-06-18T08:52:09.867 に答える