Объект 'Node' не вызывается - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть следующий код:

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None
class linkedList:
    def __init__(self):
        self.top = None
    def isempty(self):
        return self.top== None
    def push(self,data):
        new_node = Node(data)
        #if self.top ==None:
        #    self.top= new_node
         #   return
        new_node.next = self.top
        self.top = new_node
    def pop(self):
        if self.top ==None:
            print('underflow comdition')
            return
        temp = self.top
        self.top = self.top.next
        return temp.data
    def top(self):
        if self.isempty():
            print('empty stack')
            return

        return self.top.data
    def printstack(self):
        if self.isempty():
            return
        temp = self.top
        print('stack from top')
        while temp != None:
            print(temp.data)
            temp = temp.next

llist = linkedList()
llist.push(5)
llist.push(7)
llist.push(9)
llist.push(11)
llist.push(13)
llist.push(15)
llist.push(17)
llist.pop()
llist.pop()
llist.top()
llist.pop()
llist.push('oolala')
llist.printstack()

Но я получаю следующую ошибку:

TypeError                                 Traceback (most recent call last)

<ipython-input-16-a71ab451bb35> in <module>
     47 llist.pop()
     48 llist.pop()
---> 49 llist.top()
     50 llist.pop()
     51 llist.push('oolala')

TypeError: 'Node' object is not callable

Как мне это исправить?

1 Ответ

1 голос
/ 25 сентября 2019

Вы перезаписали атрибут top: он не может быть одновременно переменной и методом.

Сначала вы определите его как метод:

def top(self):
    ...

Но позже вы перезаписываете это атрибутом узла top:

    self.top = new_node

top теперь является Node, и вы не можете вызвать узел.

Iрекомендуем изменить имя метода;как правило, методы должны быть глаголами, как вы сделали с push и pop.

def show_top(self):
    if self.isempty():
        print('empty stack')
        return
    return self.top.data

...

llist.pop()
llist.show_top()
llist.pop()
llist.push('oolala')
llist.printstack()
...