subclassing and defaults.

There is one use case I'm not sure how to wrap my head around.

Say a class and subclass have different default arguments. And we want to pass the fact that the argument wasn't set along to the superclass. The "use None" convention works fine:

def __init__(self, something=None):
    super().__init__(something)

The superclass could define its own default.

But deferred binding would not work:
 
def __init__(self, something=an_expression):
    super().__init__(something)

The superclass would get the result of an_expression, and not know that it should use its default.

Is this an actual problem? I'm not sure -- I can't think of when I wouldn't want a subclass to override the default of the superclass, but maybe ? And of course, if you really do need that, then use a sentinel in that case :-) No one's suggesting that every default should be specified explicitly!

-CHB


On Tue, Oct 26, 2021 at 4:32 PM Christopher Barker <pythonchb@gmail.com> wrote:
Well, you just repeated what I said, and then again asserted:

On Tue, Oct 26, 2021 at 4:21 PM Chris Angelico <rosuav@gmail.com> wrote:
The truth is that there is no value that can be a truly universal
representation of absence, so it *always* has to be specific to each
API.

But I don't see what that's the case -- why would anyone ever need to use a MISSING to mean anything else? If you have a different meaning, use a different sentinel. Sure, that wouldn't be enforceable, but it sure could be considered best practice. 

Though i suppose I'm missing something here.

could it be a soft keyword?

Using *a, **kw does allow us to truly omit an argument.

Exactly, I don't really see why this is considered important.

-CHB

--
Christopher Barker, PhD (Chris)

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython


--
Christopher Barker, PhD (Chris)

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython