![](/static/253f0d9b/assets/icons/icon-96x96.png)
![](https://programming.dev/pictrs/image/1d99f7cb-50e7-4994-94c4-fd23f30209b7.png)
1·
11 months agoThis is the real answer, overloads are meant for exactly this purpose.
It’ll be something like this:
from typing import Literal, overload
@overload
def foo() -> Data: …
@overload
def foo(return_more: Literal[True]) -> tuple[Data, Data]: …
def foo(return_more: bool = False) -> Data | tuple[Data, Data]
...
if return_more:
return data, more_data
return data
YES! I rewatched recently. I thought it would age poorly but it’s still extremely watchable.