Pydroid编写Python链表调用show()报未定义NameError是什么原因
错误产生原因
- 实例方法调用方式错误:
Show是LinkedList类绑定的实例方法,不属于全局作用域,直接调用Show()时Python只会在全局命名空间查找对应名称,自然找不到匹配的定义,必须通过你创建的LinkedList实例对象b调用,正确写法为b.Show()。 - 缩进错误破坏类结构:你写在
size方法之后的三引号注释没有和类内其他方法保持同级缩进,顶格写的注释直接终止了LinkedList类的代码块,后续定义的Show、add方法实际上不属于LinkedList类,就算调整调用方式也会触发属性不存在的错误。 - 额外注意:Python语法大小写敏感,你的方法定义名是首字母大写的
Show,如果调用时写的是全小写show(),也会触发名称错误。
修复后可正常运行的代码
class Node: next = None data = None def __init__(self, data): self.data = data class LinkedList: def __init__(self): self.head = None def Empty(self): return self.head == None def size(self): current = self.head count = 0 while current: count += 1 current = current.next return count # 打印链表内所有数据 def Show(self): n = self.head while n: print(n.data) n = n.next else: print("empty") # 头插法添加节点 def add(self, data): new_node = Node(data) new_node.next = self.head self.head = new_node b = LinkedList() b.add(3) b.add(3) b.add(3) print(b.size()) # Show方法本身已实现打印逻辑,不需要额外套print b.Show()
内容的提问来源于stack exchange,提问作者Emmanuel C. O Peters
相关产品推荐
相关产品推荐

