Я бы сказал, что другие представленные решения имеют свои достоинства, за исключением того, что вам, возможно, придется иметь дело со случаем, когда у вас есть два отдельных объекта, которые оба реализуют оба класса. Если вы точно знаете, что объект, который вы хотите, наследует от ReturnsNumbers
и ReturnsLetters
, вы можете сделать это:
T = TypeVar(ReturnsNumbers, ReturnsLetters)
def get_number_and_letter(x: T) -> None:
print(x.get_number(), x.get_letter())
Это позволяет избежать явного определения (возможно) бесполезного класса, гарантируя, что Вы получите нужную подсказку типа.
Вы можете найти соответствующую документацию здесь .