不了解一些构图方面(不是构图)

时间:2016-06-17 04:19:42

标签: python duck-typing

我正在使用Python刷新一些数据结构和算法,所以我正在实现一个无序链接列表。在同一个文件中,我首先编写了一个Node类,后跟一个List类。我不能得到的是当前的"我的search_item()方法中的变量似乎是一个节点对象,或者至少能够访问Node类的方法和属性。我注意到如果我注释掉我的add_node()方法然后"当前"不再能访问Node的方法。现在我没有明确地使用继承和组合,所以我很难看到当前如何调用get_next()以及下面编写代码的方式。我认为我必须声明当前为: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

2 个答案:

答案 0 :(得分:0)

如果您注释掉add_node,那么您不再向链接列表添加节点,因此search_item始终会看到self.head的初始值None

调用current.get_next()只是有效,因为通过add_node始终确保self.head指向None或指向Node的{​​{1}}实例tmp }由tmp = Node(item)创建,然后分配给self.head = tmp。因此,在设置current = self.head时,它会引用Node(或None)的实例,因此您无需致电current = Node(self.head)

答案 1 :(得分:0)

我最近遇到了鸭子打字的概念,这是我的老职位。看来这是在起作用,当时还不了解。默认情况下,“当前”设置为“无”,通过调用Node类中定义的任何方法,它会自动定义为Node对象。