[Tutor] Dynamic Method Creation

Chris Fuller cfuller084 at thinkingplanet.net
Thu Jul 10 19:38:46 CEST 2008


On Thursday 10 July 2008 09:09, George Flaherty wrote:
> Hello,
>
> I am trying to port over some old code from Ruby into Python.  In my old
> ruby code I had a UnitTest class that created a bunch of test methods (i.e.
> def test_MyTestFunction) dynamically through the ruby method
> define_method(http://www.ruby-doc.org/core/classes/Module.html#M000396).
>
> This functionally allowed me to create any number of methods dynamically
> within a particular class. My problem is I have never done this nor can
> find any examples of this within python and I am pretty sure python can
> handle this?
>
> If anyone could point me in the right direction?
> thanks
>
> -george
>

If you have an existing class, you can bind new methods to it by simply using 
setattr().  
>>> class A:
...   pass
...
>>> setattr(A, 'x',lambda self: 'foo')
>>> a=A()
>>> a.x()
'foo'
>>> class B(A):
...  pass
...
>>> b=B()
>>> b.x()
'foo'

You can also use new.classobj() to create arbitrary classes on-the-fly.  See 
the documentation for the  new module, and google "python metaclasses"

Cheers


More information about the Tutor mailing list