In Python, when subclassing tuple, the __new__ function is called with self as an argument. For example, here is a paraphrased version of PySpark's Row class:
class Row(tuple):
    def __new__(self, args):
        return tuple.__new__(self, args)
But help(tuple) shows no self argument to __new__:
  __new__(*args, **kwargs) from builtins.type
      Create and return a new object.  See help(type) for accurate signature.
and help(type) just says the same thing:
__new__(*args, **kwargs)
      Create and return a new object.  See help(type) for accurate signature.
So how does self get passed to __new__ in the Row class definition?
- Is it via *args?
- Does __new__have some subtlety where its signature can change with context?
- Or, is the documentation mistaken?
Is it possible to view the source of tuple.__new__ so I can see the answer for myself?
My question is not a duplicate of this one because in that question, all discussion refers to __new__ methods that explicitly have self or cls as first argument. I'm trying to understand
- Why the tuple.__new__method does not haveselforclsas first argument.
- How I might go about examining the source code of the tuple class, to see for myself what's really going on.
Follow-up: Moderators closed this old question as a duplicate of this one. But it's not a duplicate. Look at the accepted answer on this question and note how little overlap it has with the answers in the claimed duplicate, in terms of the information provided.
 
    