Python 3键入注释和父子设计

时间:2019-05-05 06:44:49

标签: python parent-child typing

我正在编写一些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 个答案:

答案 0 :(得分:1)

您可以使用指定名称的字符串:

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

有关更多说明,请查看this answer

答案 1 :(得分:1)

这是一个循环依赖问题。

运行代码并遇到Parent类时,它会寻找Child类定义,但之后定义,因此找不到它并抛出错误!

如果交换两个定义,则在运行代码并遇到Child类时,它会寻找Parent类定义,但此后定义,因此找不到它并抛出错误!

要解决此问题,您必须使用here中标识的名称中的字符串,问题将得到解决

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