En Tue, 19 Jan 2010 08:44:09 -0300, Michele Simionato
<michele.simion...@gmail.com> escribió:
On Jan 16, 6:55 pm, Steven D'Aprano <st...@remove-this-
cybersource.com.au> wrote:
I have a series of subclasses that inherit methods from a base class,
but
I'd like them to have their own individual docstrings.
from types import FunctionType, CodeType
def newfunc(func, docstring):
c = func.func_code
nc = CodeType(c.co_argcount, c.co_nlocals, c.co_stacksize,
c.co_flags, c.co_code, c.co_consts, c.co_names,
c.co_varnames, c.co_filename, func.__name__,
c.co_firstlineno, c.co_lnotab, c.co_freevars,
c.co_cellvars)
nf = FunctionType(nc, func.func_globals, func.__name__)
nf.__doc__ = docstring
return nf
def setdocstring(method, docstring):
cls = method.im_class
basefunc = getattr(super(cls, cls), method.__name__).im_func
setattr(cls, method.__name__, newfunc(basefunc, docstring))
class B(object):
def m(self):
"base"
return 'ok'
class C(B):
pass
setdocstring(C.m, 'C.m docstring')
This is basically the same technique as in
<http://permalink.gmane.org/gmane.comp.python.general/651001> but there is
a difference: you clone the function object *and* the code object it is
based on. As I understand it, code objects are immutable and there is no
need to clone them, but I may be wrong. Why did you feel the need to clone
the code object too?
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list