如何在 Python 中为未初始化的变量声明类型?

用户2415706

我在练习算法和数据结构的同时学习使用 mypy 和静态类型检查器。

在二叉搜索树中,节点初始化时没有子节点。它们属于 Node.js 类型。但是,在 Python 中似乎 None 是它自己的对象类型,所以 mypy 在下面给了我一个错误。是否可以将未分配的子项初始化为 Node 类型?

binary_search_tree.py:17: error: Incompatible types in assignment (expression has type "None", variable has type "Node")
binary_search_tree.py:18: error: Incompatible types in assignment (expression has type "None", variable has type "Node")
Found 2 errors in 1 file (checked 1 source file)

代码如下:

class Node:
    # A node has a value which is an int and two children which are nodes
    def __init__(self, value: int):
        self.value: int = value
        self.left: Node = None
        self.right: Node = None 
awarrier99

因为这些值None有时可能存在,所以您应该将它们指定为Optional类型,然后None在使用它们时执行显式检查,以便mypy知道它们具有值。来自此处mypy文档的更多信息

from typing import Optional

class Node:
    # A node has a value which is an int and two children which are nodes
    def __init__(self, value: int):
        self.value: int = value
        self.left: Optional[Node] = None
        self.right: Optional[Node] = None

这是不可能的,否则他们申报的只是一个Node类型,如果你初始化它们作为None另一种选择是创建一个NullNode(或类似的)子类,该子类仍然具有该类型,Node但表示没有该类型Node

class Node:
    # A node has a value which is an int and two children which are nodes
    def __init__(self, value: int):
        self.value: int = value
        self.left: Node = NullNode()
        self.right: Node = NullNode()

class NullNode(Node):
    pass

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python中的类定义中声明未初始化的变量

如何在Python中重新初始化变量?

如何在python中初始化存储在变量中的类

如何在python中重新计算/重新初始化类的变量

如何在以键为对象的Python中初始化字典?

如何在python中初始化类而不是实例

如何在python中初始化time()对象

如何在python字典中初始化顺序更改

如何在Python中重新使用初始化的类?

如何在Python中初始化继承的类

如何在 Python 中重新初始化类对象?

如何在 Python 中重新初始化类对象?

如何在python中声明变量?

如何在python中检查变量是否为enum类型

如何在TS节点中的初始化全局变量中声明?

如何在If Else Statement Android中声明和初始化变量?

如何忽略MSVC中未初始化的变量错误

如何在不使用python初始化的情况下获取类对象的属性类型

如何在结构声明中初始化位域?

如何在Java中声明和初始化数组?

如何在Kotlin中声明和初始化MutableSet?

如何在TypeScript中初始化(声明)数组?

如何在字典初始化中声明事件?

如何在Java中创建未初始化的静态最终变量

如何在Unsafe Rust中传递未初始化的变量地址

如何在自动化测试中初始化会话数据?(python 2.7,webpy,nesttests)

如何在Typescript中初始化类型化数组

如何在Angular 4中初始化类型定制服务的私有变量?

如何在一行中初始化某种类型的多个变量