Строка документации Python: переопределить документацию родительского метода без реализации - PullRequest
0 голосов
/ 11 января 2019

Я новичок в документации строк Python, поэтому этот вопрос может быть довольно простым, однако я не смог найти четкого ответа, вероятно, потому что я не задаю правильные вопросы. Я нашел этот вопрос о наследовании строк документации очень полезным, однако мне нужно сделать что-то немного другое: я хочу изменить объявленный тип возврата родительской функции, которую мне не нужно переопределять в сыне.

Это упрощенный сценарий: у меня есть пул рабочих разных классов. Все рабочие имеют общего предка, назовем его BaseWorker, и все пулы также имеют общего предка BasePool.

Это пример (ОЧЕНЬ упрощенный), который позволяет мне использовать хинтинг типа IDE, однако он включает в себя ненужное переопределение return_stored_worker ():

class BaseWorker():
    pass
class TypeAWorker(BaseWorker):
    pass

class BasePool(object):
    def __init__(self, n):
        self._pool = {}
        for i in range(n):
            self._pool[i] = BasePool()

    def return_stored_worker(self, id):
        """ Blabla
        Returns:
            BaseWorker
        """
        # Verifications and other stuff
        return self._pool[id]

class TypeAPool(object):
    def __init__(self, n):
        self._pool = {}
        for i in range(n):
            self._pool[i] = TypeAWorker()

    def return_stored_worker(self, id):
        """ Blabla
        Returns:
            TypeAWorker
        """
        return super().return_stored_worker(id)

Как видите, это помогает, но вводит несколько наносекунд в вызовы, которые совершенно бессмысленны с программной точки зрения.

При правильном кодировании TypeAPool выглядит так:

class TypeAPool(object):
    def __init__(self, n):
        self._pool = {}
        for i in range(n):
            self._pool[i] = TypeAWorker()

Моя главная цель - использовать автозаполнение IDE, а не генерацию документов. Может быть, есть способ сообщить документам, что self._pool на самом деле является картой int -> TypeAWorker, а не просто dict, который является настоящим классом python?

...