Проблема в том, что Table
подклассы list
.Если мы реализуем требуемые методы контейнера в Table
вместо создания подкласса list
, тогда автозаполнение работает, как и ожидалось, например:
from dataclasses import dataclass
@dataclass
class Record:
ID: int
class Table:
def __init__(self, items):
...
def __getitem__(self, ID) -> Record:
...
def __call__(self, ID) -> Record:
return self.filter(ID)
def filter(self, ID) -> Record:
return Table(x for x in self if x.ID == ID)[0]
table = Table([Record(123)])
table[0]. # works
table.filter(123). # works
table(123). # works
Я тестировал на PyCharm Professional 2018.3.2.
Вы можете просмотреть документацию здесь для получения дополнительной информации об эмуляции типов контейнеров.