Почему типы вложенных объединений не обрабатываются должным образом средствами защиты типов?Python

Программы на Python
Ответить
Anonymous
 Почему типы вложенных объединений не обрабатываются должным образом средствами защиты типов?

Сообщение Anonymous »

В следующем коде допустимая функция и недействительная функция делают одно и то же. Почему MyPy устраивает действительный, но выдает ошибку при неверном?
Разве TypeGuard не справится с этим?
Если я добавляю функцию только в B и C и вызываю эту функцию из блока, защищенного ifBorC, это работает нормально.
Не смотрит ли MyPy на защиту типов при работе с с полнотой типов объединения?
from typing import TypeGuard

class A:
pass

class B:
pass

class C:
pass

ABC = A | B | C
BorC = B | C

def isBorC (x: ABC) -> TypeGuard[BorC]:
return isinstance(x, B) or isinstance(x, C)

def valid (x: ABC) -> str:
if isinstance(x, A):
return 'a'
if isinstance(x, B) or isinstance(x, C):
return 'b or c'

def invalid (x: ABC) -> str:
if isinstance(x, A):
return 'a'
if isBorC(x):
return 'b or c'
# Yields error: Missing return statement [return]


Подробнее здесь: https://stackoverflow.com/questions/792 ... ype-guards
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»