Проверка экземпляра класса на Mypy Python - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть два следующих класса в двух разных модулях Python

class Node(object):

    def __init__(self,data:int)-> None: 
        if data is not None:
            self._index:int = data 



    def get_node_index(self)->int:
        if self._index is not None:
            return self._index 

AND



from Graph import Node 

class NodeTest(object): 
    def func(self):
        n = Node(4) 
        print(n.get_node_index()) 
        data:bool = n.get_node_index() 
        print(type(data))

if __name__ == '__main__':
     a = A()
     a.func()

Когда я запускаю main во втором классе, я получаю следующий вывод

4
<class 'int'>

Я не могу понять, почему mypy не предупреждает, что тип данных должен быть int , если я назначаю его, используя n.get_node_index(), который имеет тип возврата int


1 Ответ

2 голосов
/ 19 сентября 2019

Я думаю, что вы хотите передать --check-untyped-defs, например, mypy

, следующее не дает никаких ошибок по умолчанию:

def foo():
  a = 5
  b: bool = a

но при запуске как mypy --check-untyped-defs foo.py я получаю:

Несовместимые типы в присваивании (выражение имеет тип "int", переменная имеет тип "bool")

как @Michael0x2a указал, что вы также можете передать --disallow-untyped-defs на mypy, что заставит его жаловаться, что ваш NodeTest.func нетипизирован и, следовательно, не будет проверен.Затем вам нужно добавить аннотацию:

    def func(self) -> None:

, позволяющую проверять тип.

...