> On 26 Apr 2022, at 07:32, Larry Hastings <la...@hastings.org> wrote: > > […] > What could go wrong? My biggest question so far: is there such a thing as a > metaclass written in C, besides type itself? Are there metaclasses with a > __new__ that doesn't call super().__new__ or three-argument type? If there > are are metaclasses that allocate their own class objects out of raw bytes, > they'd likely sidestep this entire process. I suspect this is rare, if > indeed it has ever been done. Anyway, that'd break this mechanism, so exotic > metaclasses like these wouldn't work with "forward-declared classes". But at > least they needn't fail silently. We just need to add a guard after the call > to metaclass.__new__: if we passed in "__forward__=C" into metaclass.__new__, > and metaclass.__new__ didn't return C, we raise an exception. > There are third party metaclasses written in C, one example is PyObjC which has meta classes written in C and those meta classes create a type with additional entries in the C struct for the type. I haven’t yet tried to think about the impact of this proposal, other than the size of the type (as mentioned earlier). The PyObjC meta class constructs both the Python class and a corresponding Objective-C class in lock step. On first glance this forward class proposal should not cause any problems here other than the size of the type object.
Ronald — Twitter / micro.blog: @ronaldoussoren Blog: https://blog.ronaldoussoren.net/
_______________________________________________ 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/33PUXWIV6OAVRFJAQWYIV7CMLDKBI2ER/ Code of Conduct: http://python.org/psf/codeofconduct/