python-3.x - Python 中带有类型提示的 2 个类的相互依赖

标签 python-3.x type-hinting

我想定义 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:Using variable 'Parent' before assignment

如何提示 Child 类的初始化函数的 parent 参数类型?

谢谢

最佳答案

这是一个前向声明的情况。

要使其正常工作,您可以使用字符串 'Parent' 而不是函数 Child.__init__ 的类名 Parent(也可以选择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)

关于python-3.x - Python 中带有类型提示的 2 个类的相互依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50735538/

相关文章:

python - 单击在 python 中使用自动化 id

python - 如何在 Python 中没有交互式提示的情况下以编程方式更改用户密码?

python-3.x - 从html中的嵌入式脚本标签中提取数据

python - 如何指定返回类型与输入类型相同?

python 类型提示 - 可以使用 tensorflow 数据类型吗?

python - 如何使用Python3在PyCharm中编写多个签名提示

python - 类型提示 : How can I indicate that I want to return an instance of the actual class?

python-3.x - 获取每个用户仅包含最新行的新数据框

python-3.x - 参数 'c' 和 'cmap' 在 matplotlib 散点图中的表现如何?

python - 如何正确地向装饰器添加类型提示?