当前位置: 首页 > 面试题库 >

类中的提示类型

赏彭薄
2023-03-14
问题内容

class Node:
def append_child(self, node: Node):
if node != None:
self.first_child = node
self.child_nodes += [node]

我该怎么办node: Node?因为当我运行它时,它说name 'Node' is not defined

我应该只删除: Nodeand实例在函数中检查它吗?但是,我该如何访问node的属性(我希望它是Node类的实例)?

我不知道如何在Python,BTW中实现类型转换。


问题答案:

类型检查中的“自我”引用通常使用字符串完成:

class Node:
    def append_child(self, node: 'Node'):
       if node != None:
        self.first_child = node
    self.child_nodes += [node]

PEP-0484的“转发参考”部分对此进行了描述。

请注意, 这不会进行任何类型检查 或转换。这是一个 类型提示
,python(通常)完全不理会1。但是,第三方工具(例如mypy)使用类型提示对代码进行静态分析,并且可能在运行时生成错误。

另外,从python3.7开始,您可以使用来 隐式 将所有类型提示转换为模块内的字符串from __future__ import annotations(在python4.0中,这是默认值)。

1提示 自省的-因此,如果您确实愿意,可以使用它们使用装饰器或类似工具来构建某种运行时检查程序,但是python默认不会执行此操作。



 类似资料:
  • 问题内容: 我想允许使用Python 3进行类型提示,以接受某个类的子类。例如: 现在,当输入以下代码时: 我得到一个PyCharm IDE提示“期望的类型A,取而代之的是Type [B]。” 如何更改此处的类型提示以接受A的任何子类型? 据此(https://www.python.org/dev/peps/pep-0484/#type-definition- syntax ,“该类型的参数也接受

  • 我希望允许使用Python 3进行类型提示以接受某个类的子类。例如。: 现在当键入以下代码时: 我收到一个 PyCharm IDE 提示“预期的类型 A,而是获得类型 [B]。 如何在这里更改类型提示以接受? 根据PEP 484(“类型为特定参数类型的子类型的表达式也可用于该参数。”),我知道我的解决方案< code>(cls: A)应该可以工作?

  • 问题内容: 在PEP 484中 ,包含模块的类型提示已添加到Python 3中。在Python 2中有什么方法可以做到这一点?我能想到的就是有一个装饰器来添加到检查类型的方法中,但这将在运行时失败,并且不会像提示所允许的那样被较早地捕获。 问题答案: 根据 Python 2.7的建议语法和 定义类型提示的PEP 484中的 跨代码 ,存在与Python 2.7兼容的另一种语法。但是,它不是强制性的

  • 我试图在Python3.5中使用类型提示。1,代码如下: 我猜在解析类型A时,类型A还没有完全构造,这是范围界定的问题,但我不理解为什么这样的语法不正确。是否有其他方式来表达它,或者它只是一个非法的构造? 我想在基类中使用这个语法提示,它可以在树状层次结构中组成派生类。

  • 问题内容: 我想向函数添加类型提示,该函数将接受带有方法的任何对象。例如,在 我不想限制为特定类型,例如或。只要它支持,它就是的适当参数。如何在没有不必要限制的情况下注释其类型? 编辑:显然,PyCharm可以在许多常见情况下得出适当的提示,但在我的实际用例中却不能。我无法发布代码,因为它是用于工作的,而且我找不到PyCharm失败的非专有最小示例。无论如何,原始问题不会引用PyCharm,它仍然

  • 问题内容: 只是好奇是否有一种方法可以在netbeans中为常规变量提供类型提示,以便intellisense可以选择。我知道您可以针对类属性,函数参数,返回类型等执行此操作,但是我不知道如何针对常规变量执行此操作。在您拥有可以返回不同对象类型(例如服务定位符)的方法的情况下,这确实有帮助。 例如: 之后使用$ someService的地方,netbeans将提供在Some_Service类中定义