不了解某些组成方面(不是组成)
Not understanding some composition aspects (not composition)
我正在用 Python 复习一些数据结构和算法,所以我正在实现一个无序列表。在同一个文件中,我先写了一个节点 class,然后是一个列表 class。我不明白的是,我的 search_item() 方法中的 "current" 变量似乎是一个节点对象,或者至少能够访问节点 class 方法和属性。我注意到,如果我注释掉我的 add_node() 方法,那么 "current" 将无法再访问 Node 的方法。现在我既没有明确使用继承也没有使用组合,所以我很难看到 current 如何按照下面编写代码的方式调用 get_next() 。我认为我必须将 current 声明为:current = Node(self.head) 但 current = self.head 似乎有效?
非常感谢您的帮助。
class Node:
def __init__(self, data):
self.data = data
self.next = None
def get_data(self):
return self.data
def set_data(self, d):
self.data = d
def get_next(self):
return self .next
def set_next(self, n):
self.next = n
class UnorderedList:
def __init__(self):
self.head = None
def add_node(self, item):
tmp = Node(item)
tmp.set_next(self.head)
self.head = tmp
def search_item(self, item):
current = self.head
# current = Node(self.head)
found = False
while current != None and not found:
if current.get_data() == item:
found = True
else:
current = current.get_next()
return found
好吧,如果你注释掉 add_node
那么你就不会再向链表中添加节点,因此 search_item
将始终看到 self.head
的初始值,即 None
.
调用 current.get_next()
之所以有效,是因为通过 add_node
您始终确保 self.head
指向 None
或指向 Node
的实例 tmp
由 tmp = Node(item)
创建,然后分配给 self.head = tmp
。因此,当设置 current = self.head
时,它已经引用了 Node
(或 None
)的实例,因此您不需要调用 current = Node(self.head)
.
我最近刚接触到鸭子打字的概念,然后想到了我的这个旧 post。似乎这就是在起作用,只是当时不理解。 'current' 默认设置为 None,当调用节点 class 中定义的任何方法时,它会自动定义为节点对象。
我正在用 Python 复习一些数据结构和算法,所以我正在实现一个无序列表。在同一个文件中,我先写了一个节点 class,然后是一个列表 class。我不明白的是,我的 search_item() 方法中的 "current" 变量似乎是一个节点对象,或者至少能够访问节点 class 方法和属性。我注意到,如果我注释掉我的 add_node() 方法,那么 "current" 将无法再访问 Node 的方法。现在我既没有明确使用继承也没有使用组合,所以我很难看到 current 如何按照下面编写代码的方式调用 get_next() 。我认为我必须将 current 声明为:current = Node(self.head) 但 current = self.head 似乎有效? 非常感谢您的帮助。
class Node:
def __init__(self, data):
self.data = data
self.next = None
def get_data(self):
return self.data
def set_data(self, d):
self.data = d
def get_next(self):
return self .next
def set_next(self, n):
self.next = n
class UnorderedList:
def __init__(self):
self.head = None
def add_node(self, item):
tmp = Node(item)
tmp.set_next(self.head)
self.head = tmp
def search_item(self, item):
current = self.head
# current = Node(self.head)
found = False
while current != None and not found:
if current.get_data() == item:
found = True
else:
current = current.get_next()
return found
好吧,如果你注释掉 add_node
那么你就不会再向链表中添加节点,因此 search_item
将始终看到 self.head
的初始值,即 None
.
调用 current.get_next()
之所以有效,是因为通过 add_node
您始终确保 self.head
指向 None
或指向 Node
的实例 tmp
由 tmp = Node(item)
创建,然后分配给 self.head = tmp
。因此,当设置 current = self.head
时,它已经引用了 Node
(或 None
)的实例,因此您不需要调用 current = Node(self.head)
.
我最近刚接触到鸭子打字的概念,然后想到了我的这个旧 post。似乎这就是在起作用,只是当时不理解。 'current' 默认设置为 None,当调用节点 class 中定义的任何方法时,它会自动定义为节点对象。