Есть две проблемы с вашим кодом: сначала должна быть подпись вашей функции cast_to
:
def cast_to(obj: SuperClass, cast_to: Type[T] = Type[SuperClass]) -> T:
Затем, в вашем заявлении cast
я не уверен, что mypy
будетпозволяют использовать cast_to
в качестве первого аргумента cast
.Вместо этого вы можете попробовать:
def cast_to(obj: SuperClass, cast_to: Type[T]) -> T:
return cast(T, obj)
Конечно, с этим определением вы не сможете вызвать cast_to
только с одним аргументом.
Сейчас я идуспросить: почему вы чувствуете, что вам нужно это сделать?Вы уверены, что ваш дизайн хорош?cast
следует использовать в очень особых случаях;документация гласит:
Приведения используются для того, чтобы заставить замолчать ложные предупреждения проверки типов и оказать помощь в проверке типов, когда она не совсем понимает, что происходит.
Так что вы должны серьезно поставить под сомнение свой дизайн здесь!дайте нам немного больше информации о том, чего вы пытаетесь достичь.Возможно, есть лучшие и более чистые дизайны, чем то, что вы пытаетесь сделать.