Modifying signature of ctor in class

Chris Angelico rosuav at gmail.com
Fri Sep 25 00:07:26 CEST 2015


On Fri, Sep 25, 2015 at 7:45 AM, Joseph L. Casale
<jcasale at activenetwerx.com> wrote:
>> I don't think you can easily change the function's own definition,
>> other than by using eval (or equivalent shenanigans, like crafting
>> your own bytecode); but as of Python 3.something, the help() function
>> looks for a __wrapped__ attribute and will take function args from
>> that instead of the function itself. That way, when you use
>> functools.wraps(), it copies in the docstring and stuff, and as far as
>> help() is concerned, copies in the argument list too.
>>
>> No idea whether you'll be able to do that too, but it's a fairly
>> effective way to get around the problem if you can.
>
> Hi Chris,
> That is helpful. It still leaves me with generating a string function
> and eval'ing or compiling it to swipe the sig. At the point I could
> rebuild the entire function and simply apply it.
>
> Where all but a valid sig helps is for introspection such as tab completing
> with ipython or using an IDE etc.

I've no idea what your tab completion tools are going to be looking
at, so you'd have to dig into that and find out. This trick may or may
not work, but if it does, it'd mean you could possibly come up with
something that pretends to be a function (for introspection purposes),
without actually being one. That would let you construct a class that
ducktypes as a function and can return whatever it likes from
inspect.signature().

ChrisA


More information about the Python-list mailing list