On Jun 22, 2:44 pm, John Henry <[EMAIL PROTECTED]> wrote: > On Jun 22, 2:28 pm, askel <[EMAIL PROTECTED]> wrote: >
(snipped) > > The above doesn't exactly do I what need. I was looking for a way to > add method to a class at run time. I'm not sure what you mean by this. Bind an attribute -- a method -- to class Dummy if and only if an instance of this class is created? > What does work, is to define an entire sub-class at run time. Like: > > class DummyParent: > def __init__(self): > return > > def method_static(self, text): > print text > return > > text = "class Dummy(DummyParent):" > text += "\n\t" + "def __init(self):" > text += "\n\t" + "\tDummyParent.__init__(self)" > text += "\n\t" + "def method_dynamic(self):" > text += "\n\t" + "\tself.method_static(\"it's me\")" > > exec text > > dum=Dummy().method_dynamic() > > Thanks again. I tend to avoid exec if possible. Also, you seem to be a bit inexact with regard to the term "static". class Dummy(object): def __init__(self): new_method_name = 'method_dynamic' try: getattr(Dummy, new_method_name) except AttributeError: print "Creating an instance method..." def newf(self): """Something Descriptive Here""" return self.method_static("it's me") newf.__name__ = new_method_name setattr(Dummy, new_method_name, newf) def method_static(self, text): """I hate this name. Do not confuse this with a staticmethod; what you probably meant was that this is an attribute (a method) bound within the class body as opposed to elsewhere""" print text return # is this necessary? d1 = Dummy() d1.method_dynamic() d2 = Dummy() d2.method_dynamic() print d1.method_dynamic.im_func.__name__ print d1.method_dynamic.im_func.__dict__ print d1.method_dynamic.im_func.__doc__ print d1.method_dynamic.im_func.__module__ print d1.method_dynamic.im_self -- Hope this helps, Steven -- http://mail.python.org/mailman/listinfo/python-list