On Tue, Sep 11, 2018 at 10:12:56AM +0200, Chris Barker via Python-ideas wrote:

> hmm -- this is a trick -- in those cases, I find myself using *args,
> **kwargs when overloading methods. But that does hide the method signature,
> which is really unfortunate. IT works pretty well for things like GUI
> toolkits, where you might be subclassing a wx.Window, and the docs for
> wx.Window are pretty easy to find, but for you own custom classes with
> nested subclassing, it does get tricky.

Do we need to solve this in the interpreter? Surely this is an argument 
for better tooling.

A sophisticated IDE should never be a *requirement* for coding in 
Python, but good tools can make a big difference in the pleasantness or 
otherwise of coding. Those tools don't have to be part of the language.

At least for methods, code completers ought to be able to search the MRO 
for the first non-**kwargs signature and display parameters from further 
up the MRO:

class Parent:
    def method(self, spam):
        pass

class Child(Parent):
    def method(self, **kwargs):
        pass

Now when I type

   Child().method(<TAB>)

the IDE could search the MRO and find "spam" is the parameter. That 
becomes a "quality of IDE" issue, and various editors and IDEs can 
compete to have the best implementation.

Or perhaps we could have an officially blessed way to give tools a hint 
as to what the real signature is.

class Child(Parent):
    @signature_hint(Parent.method)
    def method(self, **kwargs):
        pass

Statically, that tells the IDE that "true" signature of Child.method can 
be found from Parent.method; dynamically, the decorator might copy that 
signature into Child.method.__signature_hint__ for runtime 
introspection by tools like help().

The beauty of this is that it is independent of inheritance. We could 
apply this decorator to any function, and point it to any other function 
or method, or even a signature object.

@signature_hint(open)
def my_open(*args, **kwargs):
    ...


And being optional, it won't increase the size of any functions unless 
you specifically decorate them.


-- 
Steve
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to