Python 3: типографская аннотация и родительско-дочерний дизайн - PullRequest
0 голосов
/ 05 мая 2019

Я пишу некоторый код на Python, где мне нужно использовать дизайн типа «родитель-потомок», например:

from typing import List


class Parent(object):

    def add_children(self, child: List[Child]):
        """Do something here"""


class Child(object):

    def set_parent(self, parent: Parent):
        """Do something here"""

Но Python вызывает NameError и жалуется, что класс Child не был определен. Это логично, потому что он относится к классу Parent.

Есть ли что-то вроде "прямого объявления" в C ++ для решения подобных проблем или есть какой-то другой способ? Я попытался Google это безуспешно.

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Это проблема циклической зависимости.

Когда ваш код запускается и класс Parent встречается, он ищет определение класса Child, но оно определяется позже, поэтому он не может его найти и выдает ошибку!

Если вы меняете два определения, когда ваш код запускается и класс Child встречается, он ищет определение класса Parent, но оно определяется позже, поэтому он не может найти его и выдает ошибку!

Чтобы решить эту проблему, вы должны использовать строку с именем, указанным в здесь , и проблема будет решена

 def add_children(self, child: "List[Child]"):
1 голос
/ 05 мая 2019

Вы можете использовать строку, указав имя:

def add_children(self, child: "List[Child]"):

Для дальнейшего объяснения взгляните на этот ответ .

...