Python set变量在iter方法中

2024-09-28 03:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这对我来说似乎是一个错误,我真的不知道为什么

我有一个非常简单的自定义LinkedList类:

class MyLinkedList:

    def __init__(self):
        self.head = None

    def __iter__(self):
        self.currNode = self.head
        return self

    def __next__(self):
        if self.currNode:
            res = self.currNode
            self.currNode = self.currNode.next
            return res
        else:
            raise StopIteration

    def addAtHead(self, val: int) -> None:
        currNode = self.head

        self.head = Node(val, currNode)

这个问题来自iter方法。在我向一个空的linkedList添加了一个head节点后,iter仍然认为self.head是空的!在调试节点中,我可以看到self.head是一个有效的not none实例,但将其值分配给self.currNode后,self.currNode变成了none

我认为这可能是一个属性问题,所以我将属性更改为属性。但问题依然存在。我错在哪里

    @property
    def head(self):
        return self._head

    @head.setter
    def head(self, x):
        self._head = x

enter image description here

正在添加我的调用堆栈:

    ll = MyLinkedList()
    ll.addAtTail(6)
    ll.addAtHead(5)
    ll[0] # is None 

    #where a __getitem__ is defined as:
    def __getitem__(self, i):
        n = 0
        for node in self:
            if n == i:
                return node
            n += 1
        raise IndexError


class Node:
    def __init__(self, val=None, next=None):
        self.val = val
        self.next = next         

Tags: selfnonereturnif属性initdefval
1条回答
网友
1楼 · 发布于 2024-09-28 03:18:22
class Node:
    def __init__(self, val=None, nxt=None):
        self.val = val
        self.n = nxt 

class MyLinkedList:

    def __init__(self):
        self.head = None

    def __iter__(self):
        self.currNode = self.head
        return self

    def __next__(self):
        if self.currNode:
            res = self.currNode.val
            self.currNode = self.currNode.n
            return res
        else:
            raise StopIteration

    def addAtHead(self, val: int) -> None:
        currNode = self.head

        self.head = Node(val, currNode)


n = MyLinkedList()
n.addAtHead(4)
n.addAtHead(5)
n.addAtHead(7)

for i in n:
    print(i)

得到

7
5
4

相关问题 更多 >

    热门问题