2
import re
import sys
import inspect
import testcases

testClass = re.compile(r'.*Case$')
testMethod = re.compile(r'.*Test$')

for class_name, class_obj in inspect.getmembers(testcases, inspect.isclass):
    if testClass.match(class_name):
        for method_name, method_obj in inspect.getmembers(class_obj, inspect.ismethod):
            if testMethod.match(method_name):
                # RIGHT HERE I WOULD LIKE TO INVOKE method_name
4

2 に答える 2

8

コードの直後:

for class_name, class_obj in inspect.getmembers(testcases, inspect.isclass):
    if testClass.match(class_name):
        for method_name, method_obj in inspect.getmembers(class_obj, inspect.ismethod):
            if testMethod.match(method_name):
                # RIGHT HERE I WOULD LIKE TO INVOKE method_name

あなたができる:

            methodobj = getattr(classobj, method_name)
            methodobj("appropriate arguments go here")

の場合、つまり、「適切な引数」何であるかについて何らかの手がかりがありました。最初の引数は、おそらくクラスのインスタンスになります。どのインスタンスですか? どのように取得または作成しますか? そして、他のすべての議論はどうですか?それらは何であり、それらにどのような値を渡したいですか?

呼び出される準備が整ったメソッドオブジェクトを取得することは、あなたの問題の中で最小のgetattrものです -- ご覧のとおり、それは本当にうまく、最も簡単に行われます!-) -- しかし、引数に関する上記の他の質問に対する賢明な答えが必要です (特に最初のもの、メソッドを呼び出したいインスタンス) 質問の前に、実際にはまったく意味があります!-)

于 2010-01-26T04:55:22.267 に答える
0

迅速な対応をありがとうございました。

最初の引数は、おそらくクラスのインスタンスになります。どのインスタンスですか? どのように取得または作成しますか?

わかりました。私の理解が正しければ、メソッド呼び出し methodobj の最初の引数は classobj のインスタンスである必要がありますか? 以下はいかがでしょうか。

methodobj = getattr(classobj, method_name)
methodobj(classobj())

他のすべての引数はどうですか?それらは何であり、それらにどのような値を渡したいですか?

Naaah, 他の引数はありません. これらはメソッドに変数が設定されたテストケースです. テスト ケースを実行するために他のコードを変更することなく、テスト ケースを追加できるようにしたいだけです。

まだ試していませんが、getattr について読んだところ、探しているもののようです。いくつか遊んで、私はそれを機能させることができます。

于 2010-01-26T16:01:10.543 に答える