There are a number of issues around recursive types, in general PEP 563 doesn't make a big difference either way in this case.
I think you mean something like from pydantic import BaseModel from typing import Optional class Foo(BaseModel): x: int foo: Optional['Foo'] Foo.update_forward_refs() print(Foo(x=1, foo={'x': 1})) The only difference with "from __future__ import annotations" is you can unquote Foo, e.g. Optional[Foo]. In all cases you still need "Foo.update_forward_refs()" since Foo is not defined while creating Foo. You could also use ForwardRef: "FooType = ForwardRef('Foo')...Optional[FooType]", but that's slightly more verbose and doesn't add anything. (*Sidenote:* as I'm writing this, I realise you could know what Foo is while creating Foo (same name -> reference to itself) and perhaps automatically call update_forward_refs() at the end of ModelMetaclass.__new__(), but you still need the public update_forward_refs() for more complex cases; not least bodging around PEP 563 scopes, see here <https://github.com/samuelcolvin/pydantic/issues/2678#issuecomment-821437650> .) Samuel
_______________________________________________ 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/XSDPDMFRCW4726NN5ZN2UVXHWVZCNH7X/ Code of Conduct: http://python.org/psf/codeofconduct/