Good day to all. Some time ago I'd been playing with a framework which uses dynamic class creation havily. Say, I could do:
class A: pass # I method name is dynamic meth_name = 'foo' #method code can also be dynamic - any executable object will be good enough func = lambda self: self.__class__.__name__ A.__dict__[meth_name] = func a = A() print a.foo() >> A # methods could be added/changed at runtime, without re-instantination A.__dict__[meth_name] = lambda self: type(self) print a.foo() >> <type 'instance'> #well, try this with the new-style class class A(object): pass # the new-style __dict__ is a dictproxy object A.__dict__[meth_name] = lambda self: type(self) >>Traceback (most recent call last): >> File "<interactive input>", line 1, in ? >>TypeError: object does not support item assignment Of course, I can do A.foo = some_executable_object But that does help when a dynamic method name is needed. Another option is: exec('A.%s = %s'%('foo', 'some_executable_option')) But I don't like eval'ling things :) Is there other way to add/change methods to new-style classes dynamically? -- http://mail.python.org/mailman/listinfo/python-list