On Apr 25, 2022, at 22:32, Larry Hastings <la...@hastings.org> wrote: > The general shape of it is the same. First, we have some sort of forward > declaration of the class. I'm going to spell it like this: > > forward class C > > just for clarity in the discussion. Note that this spelling is also viable: > > class C > > That is, a "class" statement without parentheses or a colon. (This is > analogous to how C++ does forward declarations of classes, and it was > survivable for them.) Another viable spelling: > > C = ForwardClass()
I like this latter one exactly because as you say it doesn’t require any syntax changes. In the fine tradition of Python, we could certainly add syntactic sugar later, but I like that this can be implemented without it and we can see how the idea plays out in practice before committing to new syntax. > This spelling is nice because it doesn't add new syntax. But maybe it's less > obvious what is going on from a user's perspective. > > Whichever spelling we use here, the key idea is that C is bound to a > "ForwardClass" object. A "ForwardClass" object is not a class, it's a > forward declaration of a class. (I suspect ForwardClass is similar to a > typing.ForwardRef, though I've never worked with those so I couldn't say for > sure.) I haven’t looked deeply at the code for ForwardRef, but I just cracked open typing.py and noticed this: class ForwardRef(_Final, _root=True): """Internal wrapper to hold a forward reference.""" __slots__ = ('__forward_arg__', '__forward_code__', '__forward_evaluated__', '__forward_value__', '__forward_is_argument__', '__forward_is_class__', '__forward_module__’) So it seems that you’re almost there already! > So, technically, this means we could spell the "continue class" step like so: > > class C(BaseClass, ..., metaclass=MyMetaClass, __forward__=C): > ... Again, nice! Look Ma, no syntax changes. I don’t know whether the __slots__ issue will break this idea but it is really … wonderful! -Barry
signature.asc
Description: Message signed with OpenPGP
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/KEZ3752H6DEZ25HJGMG3QZJYRCVJ5LCR/ Code of Conduct: http://python.org/psf/codeofconduct/