Did you bring this up on the original issue?

On Mon, Feb 8, 2021 at 10:21 AM Ben Avrahami <avrahami.ben@gmail.com> wrote:
In both python 3.7 and 3.8, typing.NamedTuple had some strange behaviour regarding multiple inheritance. This behaviour was solved in 3.9 (bpo-36517), but this fix also barred me from a feature very close to my heart: the generic named tuple

T = TypeVar('T')
class LLNode(NamedTuple, Generic[T]):
  value: T
  next: Optional[LLNode[T]]

bpo-36517 was committed because any additional features of other classes would be missing from the NamedTuple class at runtime. But Generic has no features at runtime, and thus this snippet actually works as expected in python 3.7/8. But in 3.9, it raises a TypeError, as bpo-36517 completely barred any other bases in a typing.NameTuple subclass.

I propose that instead of wholesale barring multiple inheritance in NamedTuple, NamedTuple will allow some pre-defined bases alongside it. It will only allow do-nothing mixins with no runtime features (I can only think of `Generic` Aliases atm, but perhaps others exist). As before, these bases will be actually omitted from the class's bases at runtime.

Any thoughts?
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/XZVZT3U237UCEI4FT6MZVU5MBZICV6ST/
Code of Conduct: http://python.org/psf/codeofconduct/

--Guido van Rossum (python.org/~guido)
Pronouns: he/him (why is my pronoun here?)