Michel wrote: > Hi everyone, > > I'm trying to dynamically create a class. What I need is to define a > class, add methods to it and later instantiate this class. Methods > need to be bound to the instance though, and that's my problem. Here > is what I have so far: > > method_template = "def test_foo(self):\ > #actual test_foo\ > pass" > exec method_template > > TestClass = types.ClassType("MyTestClass", (unittest.TestCase, ), {}) > TestClass.__module__ = "test" > > now what to do next?
Just assign it: >>> import unittest >>> class MyTestClass(unittest.TestCase): pass ... >>> def test_foo(self): ... self.assertEquals(1, 2) ... >>> MyTestClass.test_foo = test_foo # <---- >>> unittest.main() F ====================================================================== FAIL: test_foo (__main__.MyTestClass) ---------------------------------------------------------------------- Traceback (most recent call last): File "<stdin>", line 2, in test_foo AssertionError: 1 != 2 ---------------------------------------------------------------------- Ran 1 test in 0.000s FAILED (failures=1) If you don't know the method name beforehand use setattr(MyTestClass, method_name, method), e. g: >>> import unittest >>> class MyTestClass(unittest.TestCase): pass ... >>> def make_method(n): ... def test(self): self.assertEquals(2, n) ... return test ... >>> for i in range(3): ... setattr(MyTestClass, "test_%d" % i, make_method(i)) ... >>> unittest.main() FF. ====================================================================== FAIL: test_0 (__main__.MyTestClass) ---------------------------------------------------------------------- Traceback (most recent call last): File "<stdin>", line 2, in test AssertionError: 2 != 0 ====================================================================== FAIL: test_1 (__main__.MyTestClass) ---------------------------------------------------------------------- Traceback (most recent call last): File "<stdin>", line 2, in test AssertionError: 2 != 1 ---------------------------------------------------------------------- Ran 3 tests in 0.000s FAILED (failures=2) Peter -- http://mail.python.org/mailman/listinfo/python-list