Как избежать «ненужного сообщения»Пиланса?

#python #type-hinting #python-typing #pylance

Вопрос:

Я не совсем уверен, какова цель сообщения о ненужном isinstance, и я, как правило, регулярно получаю предупреждения об этом в своих установщиках, когда делаю что-то вроде:

 @foo.setter
def foo(self, val: int):
    if not isinstance(val, int):
        raise ValueError()
 

Итак, здесь Пиланс предупреждает меня, что «int всегда является экземпляром int», что, безусловно, имеет смысл, но я хочу убедиться, что то, что было предоставлено, на самом деле было int, и завершить код с ошибкой, если это не так.

Другие способы ввода, чтобы избежать этого конкретного предупреждения, о которых я думал:

 @foo.setter
def foo(self, val):    
    if not isinstance(val, int):
        raise ValueError()
 

В этом случае я, конечно, получаю предупреждение, что the type of val is unknown вместо этого. Наконец, есть эта опция, которая удаляет все предупреждения, но я не уверен, что использовать Any ее таким образом разумно:

 @foo.setter
def foo(self, val: Any):
    if not isinstance(val, int):
        raise ValueError()
 

Какой из них более корректен синтаксически и семантически? Или, может быть, мне следует просто отключить это предупреждение в настройках?

Комментарии:

1. Ну, вы хотите, чтобы код выполнял проверку типа, или вы хотите, чтобы статическая проверка кода считывала аннотации и делала это? Какую проблему вы пытаетесь решить с помощью Pylance в первую очередь?

2. @KarlKnechtel, в данном конкретном случае я хочу, чтобы мой код выполнял необходимую проверку типов, но я также не хочу видеть предупреждения, если есть способ избежать их.

3. Не пользователь Pylance, поэтому я могу ошибаться, но я бы предположил, что цель функции reportUnnecessaryIsinstance заключается в том, что использование isinstance нарушает принцип подстановки Лискова (LSP), один из ТВЕРДЫХ принципов объектно-ориентированного программирования. Принципы SOLID предназначены для создания кода, который легче поддерживать. Если ваш код не является объектно-ориентированным, я бы ожидал (хотя я далеко не эксперт), что применение LSP не имеет отношения к делу.