Adding new methods to an instance with docstrings

Brandon Beck bbeck at REMOVE-THIS-TO-EMAIL-ME.austin.rr.com
Tue Aug 13 22:16:26 EDT 2002


I'm currently using SPARK (http://pages.cpsc.ucalgary.ca/~aycock/spark/) 
  to help me parse a simple language I'm working on.  Part of the 
novelty of SPARK is that metainformation for the scanner and parser is 
included in the docstrings of the methods you define.

Now to my problem.  I have a bunch of trivial functions I'd like to be 
able to have as part of my scanner, however there are too many of them 
to manually maintain as part of the scanner class.  Instead, I'd like to 
be able to dynamically attach them to my scanner class at runtime.  In 
order for the SPARK framework to be able to use these methods they must 
have a docstring associated with them.  This is where my trouble lies. 
I am able to add methods to an object using the instancemethod() 
function in the new module, however when I attempt to assign to the 
__doc__ attribute of the new method, I get the following exception:

AttributeError: 'instance method' object attribute '__doc__' is read-only

Is there a good reason for having this docstring be read-only while all 
other docstrings aren't?  Is there some other way to add a method to an 
object with a docstring?


Here's the code I'm using:


def add_token(type, attr):
	self.rv.append(Token(type=type, attr=attr))

def add_method(obj, name, attr, doc):
	import new

	method = new.instancemethod(lambda attr: add_token('ID', attr), None, obj)
	method.__doc__ = doc
	setattr(obj, name, method)


Thanks,
Brandon




More information about the Python-list mailing list