2つの異なるファイルに2つのクラスがあります。私はArrayQueueクラスからadd_last(SinglyLinkedListClassから)を呼び出して、 'ArrayQueue'で終わるようにしようとしています。オブジェクトには属性 '_tail'がありません。前もって感謝します!あなたは親クラスののinit実行されなかったので、クラスオブジェクトには属性がありませんPython
#--------------------------------------------------------------------
class EmptyList (Exception) :
pass
# -------------------------------------------------------------------
class SinglyLinkedList :
# ------------------------------------------------ #
class _Node : #
def __init__ (self, theElement, theNext) : #
"""Initializes newly created _Node""" #
self._element = theElement #
self._next = theNext #
# ------------------------------------------------ #
def __init__ (self) :
"""Initializes newly created SinglyLinkedList"""
self._head = None
self._tail = None
self._size = 0
self._lastNode = None
def __len__ (self) :
return self._size
def __str__ (self) :
"""Returns string representation of SinglyLinkedList"""
returnString = 'Head --> '
current = self._head
while current != None :
returnString += (str(current._element) + ' ')
current = current._next
returnString += ('<-- Tail ('
+ ('Empty' if self._size == 0 else 'Not Empty')
+ (' with ' + str(self._size) + ' elements)'))
return returnString
def __len__ (self) :
"""Returns length of SinglyLinkedList"""
return self._size
def is_empty (self) :
"""Returns True if SinglyLinkedList is empty"""
return self._size == 0
def first (self) :
"""Returns element at head of SinglyLinkedList"""
if self._size == 0 :
raise EmptyList
return self._head._element
def last (self) :
"""Returns element at tail of SinglyLinkedList"""
return self._tail._element
def add_first (self, newElement) :
"""Inserts one element at head of SinglyLinkedL"""
theNewNode = self._Node (newElement, self._head)
self._head = theNewNode
if self._tail is None :
self._tail = theNewNode
self._size += 1
def delete_first (self) : #deque
"""Deletes one element from head of SinglyLinkedList"""
if self._head is None :
raise EmptyList('Error: attempt delete_first on empty list!')
deletedElement = self._head._element
self._head = self._head._next
if self._head is None :
self._tail = None
self._size -= 1
return deletedElement
def add_last (self, newElement) : #enque
"""Inserts one element at tail of SinglyLinkedList"""
theNewNode = self._Node (newElement, None)
if self.is_empty() :
self._head = theNewNode
self._tail = theNewNode
else:
self._tail._next = theNewNode
self._tail = theNewNode
self._size += 1
# -------------------------------------------------------------------
class ArrayQueue (SinglyLinkedList):
def __str__ (self) :
returnString = 'Size is ' + str(self._size) + ' Front - > '
for i in range (self._front, self._front + self._size) :
j = i % len(self._data)
returnString += (str(self._data[j]) + ' ')
return (returnString + ' <- Back')
def __len__ (self) :
return self._size
def __init__ (self) :
self._data = SinglyLinkedList()
self._size = 0
self._front = 0
def enqueue (self, e) :
self._size += 1
return SinglyLinkedList.add_last(self, e)
def dequeue (self) :
if self.is_empty() :
raise Empty('Queue is empty!')
self._size -= 1
return SinglyLinkedList.delete_first()
def first (self) :
if self.is_empty() :
raise Empty('Queue is empty!')
return SinglyLinkedList.first()
def is_empty (self) :
return self._size == 0
if __name__ == '__main__' :
mylist = ArrayQueue()
choice = 0
element = None
while choice < 4 :
print ('1. enque')
print ('2. dequeue')
print ('3. first')
print ('4. is_empty')
choice = int(input('Enter Choice : '))
if choice == 1 :
element = int(input('Enter integer to add : '))
mylist.enqueue(element)
elif choice == 2 :
try :
print ('Deleted', mylist.dequeue())
except Empty as el :
print (el)
elif choice == 3 :
print(mylist.first())
elif choice == 4 :
mylist._size == 0
print(mylist)
なぜ '_tail'ですか?なぜ '_'?とても不必要だと思われる – MooingRawr
なぜ最初にリンクされたリストを実装しようとしているのですか? –
singlylinkedlistクラスには、ノードと呼ばれるクラスがあります。 _tailはリンクされたリストの終わりを参照しています。その学校のプロジェクトでは、キューで指定されたファイルから数学演算を読み込んで実行するために、単一リンクリストの形式でキューを使用します。私は、なぜarray_uequeのための単一リンクリストのadd_lastメソッドを私のエンキューメソッドに継承できないのか分かりません。 –