当前位置: 首页 > 知识库问答 >
问题:

Python3类型注释和父子设计

缑兴贤
2023-03-14

我正在编写一些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提出了一个namererror,并抱怨没有定义子类。这是合乎逻辑的,因为它位于父类下。

有没有像C中的“转发声明”这样的东西来处理这样的问题,或者有其他方法?我试图用谷歌搜索它,但没有成功。


共有2个答案

单于煌
2023-03-14

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

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

为了进一步的解释,看看这个答案。

齐驰
2023-03-14

这是一个循环依赖性问题。

当您的代码运行并且遇到父类类时,它会查找子类类定义,但它是在之后定义的,因此无法找到它并抛出错误!

如果交换这两个定义,当代码运行时遇到子类时,它会查找父类类定义,但它是在之后定义的,因此无法找到它并抛出错误!

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

 def add_children(self, child: "List[Child]"):
 类似资料:
  • 确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释: Python中单行注释以 # 开头,例如:: # 这是一个注释 print("Hello, World!") 多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来,例如: 1、单引号(''') #!/usr/bin/python3 ''' 这是多行注释,用三个单引号 这是多行注释

  • 我开始更多地使用Python3的类型支持,并且我希望能够注释作为替代构造函数的的返回类型。 下面是一个简单的例子;如果我包含注释,它将失败: 那么,在为类型注释定义类之前,如何引用类呢?

  • 大家好,overflow社区,我正在努力解决Lombok的继承问题。我试图在子类上添加注释和,以便使用父lombok构造函数,但出现了错误“复制方法child()”。 父类: 儿童班: 错误消息: 重复方法Java类型中的孩子()(67109219) 感谢@rentox98的回复,我知道我的子类上的ArgsConstructor总是空的,这会导致两个相同的构造函数。 有没有Lombok方法可以基于

  • 问题内容: 我正在尝试使用具有抽象基类的Python类型注释来编写一些接口。有没有一种方法来注释可能的类型和? 例如,如何表达一个函数的明智参数是一个或两个?给出,所以我的猜测是将类型注释为,但这是行不通的。 来自mypy的错误消息: Mypy不喜欢此函数调用是有道理的,因为它希望调用本身中包含a。解压后的附加内容还会产生我不理解的输入错误。 一个人如何诠释明智的类型和? 问题答案: 对于可变位置

  • Struts 2 应用程序可以使用Java5注释作为替代XML和Java属性配置。这里是清单的不同的类别有关的最重要的注解: 命名空间注释(动作注释): @ Namespace注释允许在Action类中,而不是基于零配置的约定动作的命名空间的定义。 结果注释 - (动作译注): @ Result注解允许在Action类中,而不是一个XML文件中定义的动作结果。 结果注释 - (动作译注): @ R

  • 问题内容: 我想创建自己的注释来注释一些局部变量。编写注释不是问题,问题在于在运行时获取它们的信息。我只能从带注释的方法或方法参数中获得一些信息,而不能从局部变量中获得一些信息。有什么办法吗? 我自己的注释是这样的: 或者,作为替代方法,是否有任何方法可以获取该方法的代码,对其进行进一步解析并最终获得注释值? 提前致谢。 问题答案: 通过反射,您无法检索局部变量。因此,您无法通过反射检索局部变量上