如何从自定义链表的内部 class 中的外部 class 调用方法?
How do I call a method from my outer class in an inner class of my custom-made linked list?
我正在学习 python 并通过从头开始编写自己的链表来挑战自己。我正在使用内部节点 class 的传统结构,它包含一段数据和对下一个节点的引用。现在我正在尝试创建一个 __repr__
方法,该方法 return 是节点的字符串表示形式。 returns 的字符串如下所示:"This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
它工作正常,除非列表中只有 1 个节点,这给了我以下错误:AttributeError: 'NoneType' object has no attribute 'data'.
为了解决这个问题,我首先检查列表中是否只有一个节点,然后 return 以下字符串:"This node contains {0}. There is no next node." .format(self.data)
这就是我的 __repr__
方法现在的样子:
def __repr__(self):
if MyLinkedList.get_size() == 1:
return "This node contains {0}. There is no next node." . format(self.data)
return "This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
这是整个链表 class 到目前为止的样子:
class MyLinkedList(object):
head = None
size = None
def __init__(self):
self.size = 0
def get_head(self):
return self.head
def get_size(self):
return self.size
def is_empty(self):
if self.size == 0:
return True
else:
return False
def __repr__(self):
result = "["
curr = self.head
while curr != None:
if curr.next == None:
result += curr.data
break
result += curr.data
result += ", "
curr = curr.next
result += "]"
return result
def add_to_head(self, data):
new_node = MyLinkedList.Node(data)
if self.size == 0:
self.head = new_node
else:
new_node.next = self.head
self.head = new_node
self.size += 1
def delete_from_head(self):
if (self.size == 0):
self.head = None
else:
new_head = self.head.next
self.head = new_head
self.size =- 1
class Node():
next = None
def __init__(self, data):
self.data = data
def get_data(self):
return self.data
def get_next(self):
return self.next
def __repr__(self):
if MyLinkedList.get_size() == 1:
return "This node contains {0}. There is no next node." . format(self.data)
return "This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
但是现在当我尝试打印任何节点的字符串表示时,它会给我以下错误:TypeError: get_size() missing 1 required positional argument: 'self'
有什么办法可以解决这个问题吗?我想要做的就是在我的内部节点 class 中调用我的外部 class 的 get_size() 方法,并检查该值是否为 1。还有其他方法吗使我的节点的 __repr__
方法 return 是我想要的字符串 return 当列表中只有一个节点时?
此外,如果您发现可以对我的代码进行其他改进,我将很高兴听到它们。
我认为您需要在 get_size() 方法中添加一个 self 参数。如:
def __repr__(self):
if MyLinkedList.get_size(self) == 1:
return "This node contains {0}. There is no next node." . format(self.data)
return "This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
您只能在 MyLinkedList
class 的实例上调用 get_size()
。无论如何,节点不应该知道有关链表 class 的任何信息。只需利用节点的 next
指针代替:
def __repr__(self):
suffix = "There is not next node" if self.next is None else "The next node is {}".format(self.next.data)
return "This node contains {}. {}.".format(self.data, suffix)
我正在学习 python 并通过从头开始编写自己的链表来挑战自己。我正在使用内部节点 class 的传统结构,它包含一段数据和对下一个节点的引用。现在我正在尝试创建一个 __repr__
方法,该方法 return 是节点的字符串表示形式。 returns 的字符串如下所示:"This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
它工作正常,除非列表中只有 1 个节点,这给了我以下错误:AttributeError: 'NoneType' object has no attribute 'data'.
为了解决这个问题,我首先检查列表中是否只有一个节点,然后 return 以下字符串:"This node contains {0}. There is no next node." .format(self.data)
这就是我的 __repr__
方法现在的样子:
def __repr__(self):
if MyLinkedList.get_size() == 1:
return "This node contains {0}. There is no next node." . format(self.data)
return "This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
这是整个链表 class 到目前为止的样子:
class MyLinkedList(object):
head = None
size = None
def __init__(self):
self.size = 0
def get_head(self):
return self.head
def get_size(self):
return self.size
def is_empty(self):
if self.size == 0:
return True
else:
return False
def __repr__(self):
result = "["
curr = self.head
while curr != None:
if curr.next == None:
result += curr.data
break
result += curr.data
result += ", "
curr = curr.next
result += "]"
return result
def add_to_head(self, data):
new_node = MyLinkedList.Node(data)
if self.size == 0:
self.head = new_node
else:
new_node.next = self.head
self.head = new_node
self.size += 1
def delete_from_head(self):
if (self.size == 0):
self.head = None
else:
new_head = self.head.next
self.head = new_head
self.size =- 1
class Node():
next = None
def __init__(self, data):
self.data = data
def get_data(self):
return self.data
def get_next(self):
return self.next
def __repr__(self):
if MyLinkedList.get_size() == 1:
return "This node contains {0}. There is no next node." . format(self.data)
return "This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
但是现在当我尝试打印任何节点的字符串表示时,它会给我以下错误:TypeError: get_size() missing 1 required positional argument: 'self'
有什么办法可以解决这个问题吗?我想要做的就是在我的内部节点 class 中调用我的外部 class 的 get_size() 方法,并检查该值是否为 1。还有其他方法吗使我的节点的 __repr__
方法 return 是我想要的字符串 return 当列表中只有一个节点时?
此外,如果您发现可以对我的代码进行其他改进,我将很高兴听到它们。
我认为您需要在 get_size() 方法中添加一个 self 参数。如:
def __repr__(self):
if MyLinkedList.get_size(self) == 1:
return "This node contains {0}. There is no next node." . format(self.data)
return "This node contains {0}. The next node is {1}." .format(self.data, self.next.data)
您只能在 MyLinkedList
class 的实例上调用 get_size()
。无论如何,节点不应该知道有关链表 class 的任何信息。只需利用节点的 next
指针代替:
def __repr__(self):
suffix = "There is not next node" if self.next is None else "The next node is {}".format(self.next.data)
return "This node contains {}. {}.".format(self.data, suffix)