Adding methods to instances

Lawrence Oluyede raims at dot.com
Thu Dec 15 17:51:32 CET 2005


Il 2005-12-15, Ed Leafe <ed at leafe.com> ha scritto:
>      Here's what I'm trying to do; please let me know if I'm nuts or  
> not.
>
>      Given a string consisting of the code you would normally define  
> in a class's method, add that compiled code to an instance of that  
> class so that it can be called just like any other bound method.  
> Here's an example:
>
> xx = """def dynamic(self):
>     print "dynamic", self.testAtt
> """
>
> class Test(object):
>      testAtt = "sample"
>      def normalMethod(self):
>          print "normal", self.testAtt
>
> testInstance = Test()
> # Here's where the magic is needed
> # so that the rest of this example works.
> testInstance.normal()
> -> 'normal', 'sample'
> testInstance.dynamic()
> -> 'dynamic', 'sample'
>
>      So? Am I nuts? Or is this possible?

Yes it is, use exec() to turn your string in valid Python code
and bind the dynamic function as a method of class Test

xx = """def dynamic(self):
    print "dynamic", self.testAtt
"""

exec xx

class Test(object):
     testAtt = "sample"
     def normalMethod(self):
         print "normal", self.testAtt

t = Test()
Test.dynamic = dynamic
t.dynamic()



-- 
Lawrence - http://www.oluyede.org/blog
"Anyone can freely use whatever he wants but the light at the end
of the tunnel for most of his problems is Python"



More information about the Python-list mailing list