Как указать тип возвращаемого родительского метода как дочерний класс, динамически используя подсказку типа python? - PullRequest
1 голос
/ 28 октября 2019

Интересно, что мне делать, если я хочу, чтобы в среде IDE автоматически указывался дочерний метод? Приведенный ниже код не работает в Pycharm 2019.2

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

from typing import TypeVar, List

T = TypeVar("T")


class Node:
    def __init__(self: T, neighbours: List[T]):
        self.neighbours = neighbours # The "final type" should be determined dynamically

    def get_neighbours(self) -> List[T]:
        return self.neighbours


class ChildNodeA(Node):
    def child_method_a(self):
        pass

class ChildNodeB(Node):
    def child_method_b(self):
        pass

class ChildNodeC(Node):
    def child_method_c(self):
        pass


child_node = ChildNodeA([])

for node in child_node.neighbours:
    node.child_method_a() # I want the pycharm to auto-hint child_method_a 

child_node = ChildNodeB([])
for node in child_node.neighbours:
    node.child_method_b() # I want the pycharm to auto-hint child_method_b

1 Ответ

0 голосов
/ 28 октября 2019

Вы имеете в виду

class ChildNode(Node):
    def child_method(self) -> str:
        return 'test'
...