【发布时间】:2016-06-17 04:19:41
【问题描述】:
我正在用 Python 复习一些数据结构和算法,所以我正在实现一个无序列表。在同一个文件中,我首先编写了一个 Node 类,然后是一个 List 类。我没有得到的是我的 search_item() 方法中的“当前”变量似乎是一个节点对象,或者至少能够访问节点类方法和属性。我注意到,如果我注释掉我的 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
【问题讨论】:
-
没有继承你的例子。那么您不了解哪些继承方面?你能改变你的问题吗?
-
@olivecoder,正确,正如我在原始帖子中提到的那样,我没有明确使用继承或组合,而是以某种方式而不是声明 UnorderedList(Node) 然后实例化 current = Node(self.head),只需执行 current = self.head 即可获得对 Node 方法的当前访问权限,我想了解原因。希望这能解决我的问题。
-
没有 TBadr。您根本没有使用继承,显式或隐式(?)。这个问题与继承没有任何关系。您只是无法遵循代码。我可以说这里的概念是组合而不是继承,但这根本不重要。所以我试着建议对你的问题进行编辑,但我无法想象它的标题,肯定不是当前的。
-
指出,这可能是某种我不理解的隐含构图,如果我的帖子令人困惑,请见谅。编辑标题以将 I 继承更改为组合,希望没关系。
标签: python duck-typing