Разве плохо импортировать класс только для использования linter / autocomplete? - PullRequest
0 голосов
/ 31 октября 2019

Хорошо, мы все любим автозаполнение. Например:

num = 12
num. <tab> 

и его автозаполнение функций-членов и т. Д., Которые есть у type(int).

Допустим, у меня есть структура структуры папок

my_folder
    a.py
    super_useful.py

и содержимое super_useful.py:

from collections import namedtuple


class Point(namedtuple('Point', ['row', 'col'])):
    def some_generic_function(self) -> int:
        return 12

Под a.py Я планирую использовать порции Point, но на самом деле никогда не нужно их создавать. Я просто буду обрабатывать Point объектов. В настоящее время у меня есть:

from typing import Dict, TYPE_CHECKING
if TYPE_CHECKING:
    from super_useful import Point

class Grid():
    def __init__(self, num_rows: int, num_cols: int):
        self.num_rows = num_rows
        self.num_cols = num_cols
        self._grid: Dict['Point', int] = {}

    def add(self, point: 'Point') -> None:
        point.som  # <----- This doesn't actually autocomplete 

Но проблема, с которой я сталкиваюсь, заключается в том, что при вводе point.som <tab> автозаполнение отсутствует. Я могу обойти это так:

from typing import Dict, TYPE_CHECKING
# if TYPE_CHECKING:
from super_useful import Point

class Grid():
    def __init__(self, num_rows: int, num_cols: int):
        self.num_rows = num_rows
        self.num_cols = num_cols
        self._grid: Dict[Point, int] = {}

    def add(self, point: Point) -> None:
        point.som <tab>  # <---- autocomplete now works and shows point.some_generic_function

Итак, я думаю, есть два вопроса:
1. Я неправильно использую TYPE_CHECKER здесь? Я пробовал mypy, pep8 и flake8, и ни один из них, похоже, не выполняет автозаполнение для меня.
2. Не плохо ли импортировать Point только для того, чтобы я мог использовать автозаполнение?

...