Usually an API that returns a tuple does so when you only have a couple of items in your tuple and the name of the function returning the tuple is enough to explain what each item in the tuple does. And you shouldn't skimp on this because you don't know if your users will use indexes or attribute names to access the data structure, nor can you guarantee someone won't break your code in the future by dropping the named tuple and switching to some custom type (thanks to Python's support of structural typing (aka duck typing), you can't assume people are using a type checker and thus the structure of your return type becomes your API contract). class Point(typing.TypedDict): x: int y: int z: int # Alternatively ... Point = typing.TypedDict("Point", {"x": int, "y": int, "z": int})