Hacker News new | ask | show | jobs
by narm60 5500 days ago
These two aren't equivalent, the first example requires the shapename keyword arg, raising a KeyError when it wasn't specified
1 comments

That's true. The second one might be better written as:

  def __init__(self, shapename, **kwds):
Or, in Python 3:

  def __init__(self, *, shapename, **kwds):
(making shapename a required keyword-only argument)

  def __init__(self, shapename, **kwds):
is not better written; it allows shapename to be passed positionally which makes cooperative inheritance fragile.
The version that I was rewriting:

  def __init__(self, shapename=None, **kwds):
also allows that.