2

このようなことがPythonで可能かどうかはわかりませんが、可能であれば(少なくともこの例では)本当に便利です。

テスト構成をテスト コマンドとは別に保持したいテスト フレームワークがあります。これは、実際にコードを変更することなく、構成/テストを組み合わせて一致させることができるため便利です。私は基本的に、次のように、構成モジュールとテスト モジュールの名前を取得し、両方をロードして実行する短いランナー スクリプトを用意しています。

config = __import__(configmod)
test = __import__(commandsmod)

config.run(test.commands)

これに関する唯一の問題は、実際には、テスト スクリプトが構成パラメーターをある程度認識できるようにしたいということです。理想的には、test/commands モジュールで次のようなことができるようにしたいと考えています。

command1 = MyCommand(arg1, arg2, LazyArg1())
command2 = MyCommand(arg1, arg2, LazyArg2())
commands = [command1, command2]

ここで、LazyArg1 と LazyArg2 は構成モジュール (または両方の構成/コマンドをインポートするランナー モジュール) で定義されているメソッドです。これらの関数が実際に定義されるまで評価を遅らせる方法はありますか?

私はまた、同じ目的を達成するための他の方法にもオープンです. 私が持っていた他の唯一のアイデアは、構成モジュールに辞書をファイルに書き込んでから、コマンドモジュールにそれをインポートさせることでした(単に書き出すと仮定しますrepr(mydict))。これはあまり魅力的ではありません..うまくいきますが。

4

2 に答える 2

1

Pythonは動的に型付けされるので、これは特別なことではありません。

configMod.py:

#####これはconfigMod.pyです#####
modTestArg1="ブライアン"

def runTest(testMod、* args、** kwargs):
    testMod.doTest(* args、** kwargs)

testMod.py:

#####これはtestMod.pyです#####
def doTest(name、address、city = "San Francisco"):
    print "doTestが名前:%s、住所:%s、都市:%sで呼び出されました"%\
        (名前、住所、都市)

controlMod.py

#####これはcontrolMod.pyです#####
configModをインポートします
testModをインポートします

configMod.runTest(testMod、configMod.modTestArg1、 "123 Fake Street")

それを実行します:

python controlMod.py
doTestは名前:Brian、住所:123 Fake Street、市:SanFranciscoで呼び出されました
于 2010-02-08T19:44:47.557 に答える
0

私は自分の質問に答えるのが嫌いですが、もう少し考えた後、潜在的な解決策を思いつきました (他のアイデアを聞きたいのですが)。

モジュール mod1 があるとします:

def myfunc(z):
    return z

およびモジュール mod2:

x = lambda mod: mod.myfunc

3 番目のモジュールで次のことができるようになりました。

import mod1
from mod2 import *

x(mod1)(5)

mod1そして、あなたはのを呼び出すことになりますmyfunc。二重の関数呼び出しがわかりにくい場合は、x(mod1)別の変数名に割り当てることができます。

于 2010-02-08T17:42:01.900 に答える