TheAs of Python 3.11 (released in late 2022), there is available typing.Self designed for this purpose. Check PEP 673!
For previous Python versions, one had to consider that the name 'Position' is not avalilableavailable at the time the class body itself is parsed. I don't know how you are using the type declarations, but Python's PEP 484 - which is what most mode should use if using these typing hints say that you can simply put the name as a string at this point:
def __add__(self, other: 'Position') -> 'Position': return Position(self.x + other.x, self.y + other.y) Check the PEP 484 section on forward references - tools conforming to that will know to unwrap the class name from there and make use of it. (It is always important to have in mind that the Python language itself does nothing with these annotations. They are usually meant for static-code analysis, or one could have a library/framework for type-checking at runtime - but you have to explicitly set that.)
Update: Also, as of Python 3.7, check out PEP 563. As of Python 3.8, it is possible to write from __future__ import annotations to defer the evaluation of annotations. Forward-referencing classes should work straightforward.
Update 2: As of Python 3.10, PEP 563 is being retought, and it may be that PEP 649 is used in instead - it would simply allow the class name to be used, plain, without any quotes: the pep proposal is that it is resolved in a lazy way.
Update 3: As of Python 3.11 (to be released in late 2022), there will be available typing.Self designed for this purpose. Check PEP 673! The PEPs 563 and 649 to resolve forward references, mentioned above are still contending and it is likely none of them will go forward as it is now.