Взаимозависимость 2 классов с подсказкой типа в Python - PullRequest
0 голосов
/ 07 июня 2018

Я хочу определить 2 класса и использовать подсказки типов в Python 3.4+, но с некоторой зависимостью между ними.

Это код, который у меня есть

class Child():
    def __init__(self, name:str, parent:Parent) -> None:
        """Create a child

        Args:
            name (str): Name of the child
            parent (Parent): Parent (object)
        """
        self.name = name
        self.parent = parent
        parent.give_life(self)


class Parent():
    def __init__(self, name:str) -> None:
        self.name = name
        self.Children = []  # type: List[Child]

    def give_life(self, child:Child) -> None:
        self.Children.append(child)

, и возвращается ошибкаpylint:

E0601: Использование переменной 'Parent' перед присваиванием

Как я могу намекнуть на тип parent аргумента функции инициализации Childкласс?

Спасибо

1 Ответ

0 голосов
/ 07 июня 2018

Это случай предварительного объявления.

Чтобы заставить его работать, вы можете использовать строку 'Parent' вместо имени класса Parent для функции Child.__init__ (и, необязательно, Parent.give_life, чтобы сделатьэто симметрично).

Полученный код выглядит следующим образом:

class Child():
    def __init__(self, name:str, parent:'Parent') -> None:
        """Create a child

        Args:
            name (str): Name of the child
            parent (Parent): Parent (object)
        """
        self.name = name
        self.parent = parent
        parent.give_life(self)


class Parent():
    def __init__(self, name:str) -> None:
        self.name = name
        self.Children = []  # type: List[Child]

    def give_life(self, child:'Child') -> None:
        self.Children.append(child)
...