У меня есть следующий код, который позволяет мне Push (поместить известный тип в стек), POP (удалить последнее добавленное значение из стека) и выполнять итерацию по стеку.
Код:
class Node:
def __init__(self):
self.__value = 0
self.__NEXT = None
@property
def value(self):
return self.__value
@value.setter
def value(self, x):
self.__value = x
@property
def NEXT(self):
return self.__NEXT
@NEXT.setter
def NEXT(self, x):
if type(x) is Node:
self.__NEXT = x
else:
raise TypeError("Invalid DataType provided for NEXT Pointer, needs to be of type Node")
def __str__(self):
return "{}".format(self.__value)
class Stack:
def __init__ (self):
self.__START = None
self.__END = None
@property
def START(self):
return self.__START
@property
def END(self):
return self.__END
def PUSH(self, node):
print(node)
if type(node) is not Node:
raise TypeError("Invalid DataType provided for NEXT Pointer, needs to be of type Node")
if self.__START is None:
self.__START = node
self.__END = node
return
node.NEXT = self.__START
self.__START = node
#setting the top of the stack as self.__START
def POP(self):
if self.__START == None:
raise ValueError("There are no nodes in the Linked List")
self.__START = self.__START.NEXT
print("POP completed")
#setting the second to the top as the top
def __iter__(self):
self.__ITERATOR = self.__START
return self
def __next__(self):
if self.__ITERATOR != None:
node = self.__ITERATOR
self.__ITERATOR = self.__ITERATOR.NEXT
return node
else:
raise StopIteration
myStack = Stack()
node1 = Node()
node1.value = 1
node2 = Node()
node2.value = 2
node3 = Node()
node3.value = 3
node4 = Node()
node4.value = 4
myStack.PUSH(node1)
myStack.PUSH(node2)
myStack.POP()
myStack.PUSH(node3)
myStack.PUSH(node4)
myStack.POP()
for node in myStack:
print(node)
Вывод: 1 2 POP завершен 3 4 POP завершен 3 1
Этот код работает, если записи имеют тип Node.Я хочу повторить это, но записи могут иметь любой тип данных (универсальный тип), а не только Node (узлы).Проблема, с которой я продолжаю сталкиваться, заключается в том, что объект int не имеет атрибута NEXT.