【问题标题】:Print method for node object not working节点对象的打印方法不起作用
【发布时间】:2017-02-11 17:26:14
【问题描述】:

我正在使用 How to Think Like a Computer Scientist 自学 Python。我从文本中复制了这段代码,但我的由于某种原因抛出了一个错误。谁能看到我错过了什么?为什么Python说print_list没有定义?

class Node:
    def __init__(self, cargo = None, next = None):
        self.cargo = cargo
        self.next = next

    def __str__(self):
        return str(self.cargo)

    def print_list(node):
        while node:
            print node,
            node = node.next
        print

这是错误:

==== RESTART: /Desktop/Programming Career/Untitled.py ====

Traceback (most recent call last):
  File "Users/Desktop/Programming Career/Untitled.py", line 24, in <module>
print_list(node1)
NameError: name 'print_list' is not defined

我尝试像这样定义 print_list:

def print_list(self):
    for node in self:
        print node,
        node = node.next
    print

但我得到同样的错误: NameError: name 'print_list' is not defined

【问题讨论】:

  • print_list移出Node的定义。
  • 您的代码缩进有问题,请修复,我们可以帮助您!
  • 取消缩进不属于Node类的函数print_list()
  • @ForceBru 感谢您的提示!我已经修复了缩进
  • print_list 在类范围内吗?为什么它没有self

标签: python methods linked-list nodes


【解决方案1】:

您已经定义了一个方法print_list(),但您正试图将其作为函数调用。去掉def print_list(node):之前的缩进,就变成了一个函数。

class Node:
    def __init__(self, cargo = None, next = None):
        self.cargo = cargo
        self.next = next

    def __str__(self):
        return str(self.cargo)

def print_list(node):
    while node:
        print node,
        node = node.next
    print

或者让它成为一个方法,然后这样调用它:

class Node:
    def __init__(self, cargo = None, next = None):
        self.cargo = cargo
        self.next = next

    def __str__(self):
        return str(self.cargo)

    def print_list(self):
        node = self
        while node:
            print node,
            node = node.next
        print

那么你可以打电话给node1.print_list()而不是print_list(node1)

请注意,如果您确实将其设为一种方法,它会像您编写的那样工作,但使用约定self 作为第一个参数似乎更干净,虽然您可以重新绑定self,但可能更清楚不.

【讨论】:

    【解决方案2】:

    我认为您希望函数 print_list 不属于 Node 类。如果是这种情况,只需删除 print_list 函数的缩进即可。 Python 不像 java 或 C++ 那样使用方括号,而是使用缩进。在这种情况下,Python 将 print_list 解释为属于 Node 类的函数。

    class Node:
        def __init__(self, cargo = None, next = None):
            self.cargo = cargo
            self.next = next
    
        def __str__(self):
            return str(self.cargo)
    
    def print_list(node):
        while node:
            print node
            node = node.next
    print
    

    【讨论】:

    • 是的,这正是我想要做的。我正在混合方法和功能。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多