Почему типы вложенных объединений не обрабатываются должным образом средствами защиты типов?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»