我在写一个双链表的实现。为了遍历列表,我使用了类似于:
class Node:
""" A node in our linked list """
def __init__(self, value: Any, next: Union['Node', None] =None,
previous: Union['Node', None] =None) -> None:
self.value = value
self.next = next
self.previous = previous
...
def __next__(self, direction: int =1) -> Union['Node', None]:
if direction == 1:
return self.get_next()
else:
return self.get_previous()
...
其中get_next
和{self.next
和{
但是,PyCharm因为我想打电话给next
而对我大喊大叫
next(some_node, direction=-1)
。正确的方法是什么?在
__next__
是{a1}的一部分,应该按照上述协议中的描述使用,否则只会对rest python产生问题。在在您的例子中,只需将函数重命名为simple
next
,并使用assome_node.next(-1)
,不过我会将direction
参数更改为布尔值,正如您使用它的方式一样,以及它的名称。比如这样并用作
some_node.next()
、some_node.next(False)
甚至some_node.next(0)
(使用0代替False以获得相同的效果)除了}。两者都需要返回
__iter__
还有{iterators
。__next__
方法应该在iterators
上实现(而不是在节点类上)。请注意,所有魔术方法(当由next
之类的函数调用而不是直接调用时)都需要实现预期的参数而不是更多,而不是更少。在例如,双链接列表可以实现},并依赖于节点的}属性:
__iter__
和{next
和{例如:
^{pr2}$给出:
与
reversed
相似:next
的额外参数是默认值,__next__
不接受任何额外参数。Python没有任何双向迭代器。如果您的接口与for i in obj:
不完全相同,那么您应该编写自己的接口。在相关问题 更多 >
编程相关推荐