Самое близкое, что вы можете получить, это определить переменную типа T
, которая ограничена Table
:
T = TypeVar('T', bounded=Table)
и используйте это вместо Table
в подсказках вашего типа:
class Player:
def action(self, table_view: T.View) -> T.Action:
...
Это, однако, не мешает action
принимать Table.View
в качестве аргумента и возвращать LimitedTable.Action
; это известная проблема, подтвержденная в PEP-484 :
К сожалению, решение этой проблемы потребует введения гораздо более мощного, а также гораздо более сложного понятия, F-ограниченного полиморфизма. Мы можем вернуться к этому в будущем.
Другая проблема (я полагаю, что вы позаботились о ней, но стоит обратить на нее внимание) заключается в том, что вам все еще нужен какой-то способ, учитывая экземпляр Table.View
, чтобы определить правильный класс Action
для возвращаемого типа. У вас нет экземпляра Table
, чтобы вы могли использовать что-то вроде type(table_view).Action
.