为了方便起见,我想使用一个链表类Node
,如下所示:
a = Node(3)
b = Node(2, a)
c = Node(1, b) # c = (1) -> (2) -> (3)
我尝试了下面的类定义
class Node:
def __init__(self, val: int, next_node: Node = None):
self.val = val
self.next = next_node
...但是我在构造函数中得到了一个关于Node
的NameError
。
我知道这是递归的,但我也见过在其他语言中这样做,在Python中可能吗?
2条答案
按热度按时间yizd12fk1#
使用
typing.Self
表示Node
类型。或者,使用字符串
'Node'
。d6kp6zgx2#
在Python中,你可以通过使用一个递归结构来定义一个链表类,这个递归结构类似于你给出的例子,为了避免你遇到的NameError,你必须把类定义放在init方法之外,下面是你的代码的修正形式:
需要注意的是,next node的类型提示用字符串“Node”代替了类名Node,因此Python能够识别类引用,即使它还没有被定义。