この回答では、テスト ケースを動的に作成する方法について説明しています。
答えのコード:
class Tests(unittest.TestCase):
def check(self, i, j):
self.assertNotEquals(0, i-j)
for i in xrange(1, 4):
for j in xrange(2, 6):
def ch(i, j):
return lambda self: self.check(i, j)
setattr(Tests, "test_%r_%r" % (i, j), ch(i, j))
テストしましたが、動作しますが、方法がわかりません。
lambda self:
主に、ここで行われている魔法を理解するのに苦労しています。
- ここで使用されるラムダは、正反対のことを実行するために使用されます(つまり、まだ知られていない追加
functools.partial()
のパラメーターを 1 つ持つラッパー関数を作成するため)。 self
意味のあるキーワードですか、それともlambda spam
同様に機能しますか?- そのラムダが評価されるポイントは何ですか?
- es
.check()
の範囲外で完全に問題ないのはなぜですか?class
- ラムダなしでこれを行うにはどうすればよいですか? - 私が正しく理解していれば、あなたはなくてもできるはずです
lambda
(言うまでもなく、それは目障りであり、なしでやりたいというグイドとアレックスに同意することは言うまでもありません:)